Я нахожу, что, когда я связываю исполняемый файл против статической библиотеки (.a), символы из статической библиотеки заканчивают тем, что были экспортированы исполняемым файлом. Я хотел бы избежать этого и ничего не экспортировать.
Я попытался предоставить сценарий версии, но это, кажется, не имеет никакого значения. Содержание моего сценария версии следующие:
{
global:
main;
local:
*;
};
Существует ли способ не экспортировать символы из исполняемого файла при соединении в статической библиотеке? Я не могу перекомпилировать саму статическую библиотеку.
Исполняемые файлы не экспортируют символы по умолчанию, и не будут этого делать, если вы не используете -Wl,--export-dynamic. Это необходимо, только если вы динамически загружаете библиотеки, которые сами должны ссылаться на символы в основном исполняемом файле (это распространенный случай в C++, если ваши библиотеки содержат классы, которые переопределяют виртуальные методы в исполняемом файле)
Возможно, вы путаете экспорт символов с наличием отладочных символов. Отладочные символы будут созданы для пользы отладчика (если вы не удалите exe), но не требуются для запуска.