2010-03-20 58 views
3

也就是說,一個DLL名稱在結尾處有一個額外的@ 8,這引起了麻煩。顯然,在gcc中使用--kill-at標誌可以解決這個問題,但是我找不到任何類似的MSVC建議。有沒有一個Visual C++相當於gcc --kill-at?

編輯:阿多一點信息:

我試圖讓C++ JNI DLL的工作,但我不斷地得到 異常在線程「線程0」 java.lang.UnsatisfiedLinkError中:eveTimers.PollThread .checkKeyboardChanges()V 回來代替功能程序。我用quickview查看dll,發現它用@ 8裝飾,http://www.velocityreviews.com/forums/t143642-jni-unsatisfied-link-error-but-the-method-name-is-correct.html暗示這是一個可能的問題。幫助將不勝感激。

+0

你解決了你的問題嗎?如果沒有,你有沒有JNI DLL的源代碼?你建立它了嗎? – 2010-03-20 03:50:41

+0

問題解決了。必須清理和一些隨機的擺弄,讓編譯按我講的方式運行。 – seurimas 2010-03-21 03:43:36

+0

你的開始句子會爲我節省一天的編碼,如果我先讀它:-P – fommil 2013-08-24 23:10:27

回答

1

[編輯爲無關緊要,每個評論如下]。

另一種方法是specify export names in a .DEF file

您的調用約定和鏈接器設置也會影響到這一點。說實話,這是一種黑色藝術。使用MSVC十幾年了,你仍然偶爾會遇到討厭的名字 - 修復問題,應該很容易修復,但是在實際修復時不是很平常,因爲不同的設置如何交互。

+0

只有.DEF文件可以讓你完全防止混亂。其他方法將stdcall函數和前綴_加到cdecl函數後綴@(參數的字節數)。 – 2010-03-20 03:26:16

+0

當然,這並不那麼簡單。有些情況下,您可以使用.DEF文件路徑,並發現您的名字仍在被破壞。一如既往的解決這類問題的解決方案是真正理解MSVC鏈接階段 - 根據我的經驗,對於接近其他環境的人來說,這是一個不平凡的主張。 – 2010-03-20 03:33:35