Может кто-нибудь предложить, каким образом мы можем ограничить экспорт наших символов в глобальную таблицу символов?
Заранее спасибо
Привет
Спасибо, что ответили ...
На самом деле у меня есть исполняемый файл, который статически связан со сторонней библиотекой, скажем, "ver1.a", а также использует сторонний файл ".so", который снова связан с той же библиотекой, но другой версией, скажем, "ver2.a" , Проблема в том, что реализация обеих этих версий различна. В начале, когда исполняемый файл загружен, символы из «ver1.a» будут экспортированы в глобальную таблицу символов. Теперь всякий раз, когда загружается «.so», он пытается ссылаться на символы из ver2.a, в конечном итоге он ссылается на символы из «ver1.a», которые были ранее загружены. Таким образом, происходит сбой нашего двоичного файла.
мы подумали о решении, которое заключается в том, что мы не будем экспортировать символы для исполняемого файла в глобальную таблицу символов, таким образом, когда «.so» загружается и пытается использовать символы из ver2.a, он не найдет его в глобальной таблице символов и будет использовать свои собственные символы, т.е. символы из ver2.a
Я не могу найти способ ограничить экспорт символов в глобальную таблицу символов. Я попытался с --version-script и retain-symbol-file, но это не сработало. Для опции -fvisibility = hidden она выдает ошибку, что «-f опция может использоваться только с -shared». Так что, я думаю, это тоже, что и --version-script, работает только для разделяемых библиотек, а не для исполняемых двоичных файлов.
код на c ++, OS-Linux, gcc версия-3.2. Может оказаться невозможным перекомпилировать какие-либо сторонние библиотеки и ".so". Таким образом, опция перекомпиляции файла so с флагом bsymbolic исключена.
Любая помощь будет оценена.