У меня есть какой -то устаревший код с некоторыми классами Singleton, которые зарегистрируются, используя конструкторы глобальных переменных. Это большая кодовая база, которая составлена в один исполняемый файл. Я пытался организовать базу кода и перегруппировать код в библиотеки. Минимальный пример текущего кода - < /p>
main.cpp
int main(int argc, char *argv[])
{
return 0;
}
< /code>
hash.cpp
#include
class Hash
{
public:
Hash()
{
std::cout
и текущая конфигурация сборки - < /p>
cmakelists.txt
cmake_minimum_required(VERSION 3.26)
project(mcve)
add_executable(mcve main.cpp Hash.cpp)
< /code>
Создание кода и запуска исполняемых отпечатков < /p>
Hash
< /code>
Я изменил конфигурацию сборки на < /p>
cmake_minimum_required(VERSION 3.26)
project(mcve)
add_library(Hash Hash.cpp)
add_executable(mcve main.cpp)
target_link_libraries(mcve Hash)
Это создает статическую библиотеку Libhash.a и ссылается на исполняемый файл. Скомпилирование того же кода и запуск исполняемого файла ничего не печатают. Почему разница и где она описана? Это часть стандарта C ++ или компилятора? Это специфичная для ОС (Linux статические библиотеки)? Это неопределенное поведение?
У меня есть какой -то устаревший код с некоторыми классами Singleton, которые зарегистрируются, используя конструкторы глобальных переменных. Это большая кодовая база, которая составлена в один исполняемый файл. Я пытался организовать базу кода и перегруппировать код в библиотеки. Минимальный пример текущего кода - < /p> main.cpp [code]int main(int argc, char *argv[]) { return 0; } < /code> hash.cpp #include
class Hash { public: Hash() { std::cout и текущая конфигурация сборки - < /p> cmakelists.txt cmake_minimum_required(VERSION 3.26) project(mcve)
add_executable(mcve main.cpp Hash.cpp) < /code> Создание кода и запуска исполняемых отпечатков < /p> Hash < /code> Я изменил конфигурацию сборки на < /p> cmake_minimum_required(VERSION 3.26) project(mcve)
add_library(Hash Hash.cpp) add_executable(mcve main.cpp) target_link_libraries(mcve Hash) [/code] Это создает статическую библиотеку Libhash.a и ссылается на исполняемый файл. Скомпилирование того же кода и запуск исполняемого файла ничего не печатают. Почему разница и где она описана? Это часть стандарта C ++ или компилятора? Это специфичная для ОС (Linux статические библиотеки)? Это неопределенное поведение?