我發現,當我將可執行文件與靜態庫(.a)鏈接時,靜態庫中的符號最終被可執行文件導出。我想避免這種情況並且不輸出任何內容。避免從Linux上的可執行文件導出符號
我試過提供一個版本腳本,但它似乎沒有區別。是我的版本腳本的內容如下:
{
global:
main;
local:
*;
};
是否有靜態庫鏈接時不從可執行導出符號的方法嗎?我無法重新編譯靜態庫本身。
我發現,當我將可執行文件與靜態庫(.a)鏈接時,靜態庫中的符號最終被可執行文件導出。我想避免這種情況並且不輸出任何內容。避免從Linux上的可執行文件導出符號
我試過提供一個版本腳本,但它似乎沒有區別。是我的版本腳本的內容如下:
{
global:
main;
local:
*;
};
是否有靜態庫鏈接時不從可執行導出符號的方法嗎?我無法重新編譯靜態庫本身。
可執行文件默認不出口的符號,並不會這麼做,除非你使用-Wl, - 出口動態。這隻有在動態加載自己需要鏈接到主要可執行文件中的符號的庫時纔是必需的(如果您的庫包含的類會覆蓋exe文件中的虛擬方法,這在C++中是常見的情況)
也許,重新輸出具有調試符號的符號。調試符號將生成調試器(如果您不去除exe),但不需要運行。
使用strip
?
似乎gcc 4.8.2(在arch linux上)默認情況下會導出exec函數名,如果使用-fvisibility = hidden,則會導致事件。只有向鏈接器添加-s才能刪除符號。 – aisbaa 2013-12-20 14:28:24