2009-11-09 25 views

回答

0

有關-fleading-underscore,請參閱GCC手冊。不過,請閱讀關於此行動後果的警告;它可能不是你認爲它的解決方案。

+0

感謝您的答案,雖然它似乎沒有工作,所以在C標準是不使用領先的下劃線?我試圖讓它在編譯器中可移植,這些函數是需要加載的DLL的導出。 – 2009-11-09 21:11:45

+0

您是否將代碼編譯爲C或C++?爲了編譯器的互操作性,DLL必須只提供C接口。你可以使用C++,但是接口應該聲明爲extern「C」(當然,只使用C compatable類型,並且沒有函數重載)。 – Clifford 2009-11-10 11:30:00

0

在Windows上處理函數名稱損壞時最好的辦法是始終使用.def文件。無論編譯器如何,這都是一樣的。通常,您只需要EXPORTS部分:

EXPORTS 
    Func1 
    Func2 
    ... 
4

請參閱this answer

int Func() __asm__("[email protected]"); 

這將迫使GCC命名符號[email protected]不管是什麼它會正常完成。


哦對,@是特殊的:它用於符號版本控制。我認爲__asm__("[email protected]")曾經工作,但我想它現在不行了。

int Func() __asm__("_Func"); 
__asm__(".symver _Func, [email protected]"); 

這必須由version script文件陪同,如:

1 { 
    global: 
    _Func; 
}; 
鏈接時給予 gcc -Wl,--version-script=foo.version

+0

謝謝,但無論我做錯了什麼或它不起作用,它都不會讓我聯繫它。 http://pastebin.com/f14a9a00f – 2009-11-10 07:40:31

相關問題