2010-01-02 52 views
5

我想編譯一個使用JNI的Java庫。當我啓動程序時,我看到一個UnsatisfiedLinkError的崩潰,它說在DLL中找不到一個特定的方法。g ++:如何取消導出的符號

經過仔細觀察,我發現用於編譯和鏈接的g ++通過在方法名稱中添加後綴(如「@ 8」或「@ 16」)來改變我的方法名稱。有沒有人知道正確的編譯器選項來禁用名稱修改?提前致謝!

編輯:我通過Eclipse + CDT插件使用MinGW。

回答

12

對於JNI調用與GCC編譯的Windows DLL來工作,你需要一個外接STDCALL別名參數添加到GCC在鏈接階段:

gcc -Wl,--add-stdcall-alias 

這將正確的函數名稱添加到DLL,從而通過JNI啓用呼叫。

+0

非常感謝!這終於解決了我的問題。有了這個參數,DLL中的每個方法都有一個修飾和未修飾的版本,並且Java程序可以工作:D – 2010-01-02 21:25:59

+0

@Mavrik感謝您填寫此問題,我知道問題,但不是解決方案。 – bmargulies 2010-01-02 22:19:04