Предотвращение экспорта символов от исполняемых файлов на Linux

Я нахожу, что, когда я связываю исполняемый файл против статической библиотеки (.a), символы из статической библиотеки заканчивают тем, что были экспортированы исполняемым файлом. Я хотел бы избежать этого и ничего не экспортировать.

Я попытался предоставить сценарий версии, но это, кажется, не имеет никакого значения. Содержание моего сценария версии следующие:

{
    global:
        main;
    local:
        *;
};

Существует ли способ не экспортировать символы из исполняемого файла при соединении в статической библиотеке? Я не могу перекомпилировать саму статическую библиотеку.

7
задан Ray 3 March 2010 в 21:41
поделиться

2 ответа

Исполняемые файлы не экспортируют символы по умолчанию, и не будут этого делать, если вы не используете -Wl,--export-dynamic. Это необходимо, только если вы динамически загружаете библиотеки, которые сами должны ссылаться на символы в основном исполняемом файле (это распространенный случай в C++, если ваши библиотеки содержат классы, которые переопределяют виртуальные методы в исполняемом файле)

Возможно, вы путаете экспорт символов с наличием отладочных символов. Отладочные символы будут созданы для пользы отладчика (если вы не удалите exe), но не требуются для запуска.

9
ответ дан 6 December 2019 в 21:12
поделиться

Используйте strip ?

$ man strip

3
ответ дан 6 December 2019 в 21:12
поделиться