任何人都可以請建議一些方法,我們可以限制我們的符號導出到全局符號表嗎?將符號限制爲可執行的本地範圍
在此先感謝
嗨,
感謝回答...
其實我有一個靜態鏈接到第三方庫可執行說「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一起使用」。所以我想,這也像「 - 版本腳本」只適用於共享庫而不是可執行的二進制文件。
代碼在C++,OS-Linux,gcc version-3.2中。可能無法重新編譯任何第三方庫和「.so」。因此,重新編譯與bsymbolic標誌「,所以」文件的選項被排除在外。
任何幫助,將不勝感激。
您至少可以告訴我們該應用程序以哪種語言編寫? –