2015-07-21 29 views
0

我有這些功能的DLL:爲什麼未導出函數的名稱仍然列在MinGW DLL中?

void __declspec(dllexport) foo1() 
{ 
    printf("1"); 
} 

void foo2() 
{ 
    printf("2"); 
} 

當打開在相關性沃克DLL,僅foo1()被示爲輸出,其被預期。但是,當我在十六進制編輯器中打開DLL文件時,我注意到字符串_Z4foo2v,它看起來像一個導出名稱。

但由於foo2()未標記爲導出,爲什麼此字符串_Z4foo2v存在?

+0

你有沒有建立與調試信息庫或不--dynamic選項?因爲如果您使用調試信息構建它,它是來自正常符號的符號。嘗試去除共享庫,看看是否有這些符號。 –

+0

這是一個調試版本,是的。我嘗試了發佈版本,'foo2()'確實沒有在那裏列出。謝謝,您可以將其作爲答案發布。 – sashoalm

+0

其實如果你讀'man nm',你會看到'--dynamic'選項,它切換顯示哪些類型的部分(僅動態或全部) –

回答

1

你有沒有建立一個帶有調試信息的庫?因爲如果您使用調試信息構建它,它是來自普通符號的符號。嘗試去除共享庫,看看是否有這些符號。

其實如果你看過的人處,你會看到它切換到(動態只或全部)顯示什麼類型的部分

相關問題