У меня есть это:
a.cpp
int localfunction () { return 1; }
int local_symbol = localfunction();
b.cpp
void thirdfunction () {};
main.cpp
void main () { thirdfunction (); }
Когда я компилирую это в основной исполняемый файл, все работает (даже с оптимизацией), и локальная функция выполняется при запуске, даже если я не вызываю ее напрямую.
Теперь в Visual C ++ и GCC я поместил a.cpp и b.cpp в статическую библиотеку (.lib). локальная функция больше не выполняется / не определена.
Из того, что я понимаю, символ определяется как "неиспользуемый" и удаляется. Но это звучит странно, потому что:
- Почему он не удаляется, когда я не использую файл .lib?
- Поскольку библиотека связана, почему компоновщик уничтожает код инициализации?
Я пытаюсь сделать так, чтобы в каждом используемом мной файле .lib был набор функций запуска, которые автоматически регистрируют некоторые данные. Основной исполняемый файл не должен знать, с какими файлами связаны ссылки, и не должен явно ссылаться на «локальную функцию» (/ INCLUDE работает, но это не оптимально)
Кстати: использование различных опций VC ++ (OPT: NOREF и т. Д.) Не решает проблему.
Спасибо!
QbProg