У меня есть эта библиотека, которая включает в себя некоторый статический код инициализации, который необходимо запустить до main()
. Все это работает хорошо, если вы просто скомпилируете все единицы перевода вместе, но это не сработает, если я предоставлю статическую библиотеку (файл .a
) и заставлю пользователей связать свое приложение с ней - компоновщик просто игнорирует символы, которые делают мои статические инициализация.
В качестве альтернативы я могу заставить компоновщик подобрать все в статической библиотеке, если я укажу параметр -Wl,--whole-archive
для GCC, т.е. укажу параметр --whole-archive
для ссылки GNU.
Но есть ли золотая середина? Можно ли пометить некоторые символы и сделать так, чтобы компоновщик всегда подбирал их для исполняемого файла, а остальные символы добавлялись только при необходимости?
Мотивация: я использую несколько статических блоков для регистрации классов на фабрике; Я хочу сделать свой код доступным в виде (нединамической) библиотеки, чтобы пользовательский код не выполнял никаких «магических заклинаний» для заполнения фабрики.
Некоторые связанные вопросы:
--whole-archive
? - person tmm1   schedule 11.08.2019--undefined
- единственное другое решение. Подробнее см. stackoverflow.com/a/47186765/332798. - person tmm1   schedule 11.08.2019