Избегайте экспорта символов из исполняемых файлов в Linux - PullRequest
7 голосов
/ 04 марта 2010

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

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

{
    global:
        main;
    local:
        *;
};

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

Ответы [ 2 ]

8 голосов
/ 04 марта 2010

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

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

3 голосов
/ 04 марта 2010

Использование strip?

$ man strip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...