Почему конструктор глобальной переменной не вызывается в библиотеке?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему конструктор глобальной переменной не вызывается в библиотеке?

Сообщение Anonymous »

У меня есть какой -то устаревший код с некоторыми классами 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 статические библиотеки)? Это неопределенное поведение?

Подробнее здесь: https://stackoverflow.com/questions/769 ... -a-library
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»