這可能不是第一次在這裏問題聽起來像那樣,但... 我知道有工具用於從.dll(.def生成器)但是由於編譯器爲函數生成的格式錯誤的名稱格式不同,所以沒有用(對我來說)。 有沒有什麼辦法(可能在.def文件中有一些額外的選項)告訴mingw編譯器:_ZN6IDcDrv6CreateEPKci(MingW的錯位名稱格式)=?創建@ IDcDrv @@ SAPAVDcDrv @@ PBDH @ Z(MSVC的錯位名稱格式)??? ?(重定向lib.a對dll的引用) 我正在談論封閉源代碼的dll,所以我不能編譯一個dll for mingw ...或開源庫,它的建設花費了大量的時間和/或忍耐。MinGW鏈接MSVC的dll庫的麻煩(未定義的參考)
1
A
回答
1
不可以。MSVC名稱修改是專有的和未記錄的。
即使你可以在編譯器中得到一致的名稱,也會有很多其他的小差異,會讓你的鏈接代碼在各種奇怪的地方崩潰(類佈局,函數調用等)。
如果您需要互操作性,請編寫一個C接口。 32位MinGW(-w64)GCC甚至可以鏈接到32位MSVC C庫(反之亦然)(如果包含必要的編譯器庫,如libgcc或MSVC默認添加到其代碼生成的安全檢查cookie thingie庫)。
相關問題
- 1. 從MinGW鏈接到MSVC DLL
- 2. Opencv鏈接庫 - 未定義的參考
- 3. 鏈接GLFW與minGW時未定義的參考錯誤gcc
- 4. Qt5 - 鏈接pHash庫「未定義參考」
- 5. C++麻煩的extern - 未定義的參考
- 6. 未定義參考++鏈接
- 7. W64-MinGW的LLVMSupport.a:未定義參考__imp_ *
- 8. C++ GL鏈接未定義的參考
- 9. 鏈接錯誤:未定義的參考
- 10. 在MinGW中鏈接時出現「未定義參考」錯誤
- 11. C#參考麻煩
- 12. 麻煩參考這個和功能:未定義不是功能
- 13. CMake的麻煩MinGW的
- 14. 創建共享庫的鏈接未定義參考
- 15. 庫鏈接錯誤:未定義的參考_imp__
- 16. 鏈接到靜態庫時未定義的參考錯誤
- 17. C++鏈接錯誤未定義參考
- 18. CMake鏈接錯誤(未定義參考)
- 19. 麻煩鏈接到的GObject內省庫
- 20. 在CmakeList中鏈接Boost庫的麻煩
- 21. 鏈接mingw DLL與Windows DLL
- 22. 麻煩服務參考
- 23. 麻煩回覆參考
- 24. 日食+ CDT + MinGW的,得到 「未定義參考libiconv的」 錯誤
- 25. C++,MingW平臺,未定義的參考`libiconv的」
- 26. C++參考副本的麻煩(STL對)
- 27. 命令行鏈接在Windows上的FMOD,'未定義的參考'
- 28. 非官方的OpenGL SDK鏈接問題 - 未定義的參考
- 29. 鏈接錯誤:未定義參考icu_50 :: ::的UnicodeString的UnicodeString()
- 30. 鏈接彙編程序:錯誤 「未定義的參考`printf的'」
你說得對。但是,如果函數具有這種格式化的'_SomeFunction @ 16'而MinGW正在尋找'SomeFunction'(C聲明),是否可以設置一個引用'SomeFunction' - >'_ SomeFunction @ 16'?順便說一下,使用這個代碼'void(__stdcall * SomeFunction)()=(void(__stdcall *)())GetProcAddress(hModule,「_SomeFunction @ 16」);如果(SomeFunction)SomeFunction();'不會崩潰應用程序(沒有堆棧損壞等)。 – 2013-09-26 13:36:13
編譯器之間的對象佈局和有時甚至是對象定義(在C++ stdlib類型的情況下)是不同的,因此您需要確保不混合它們。總之:不要。 – rubenvb 2013-09-26 15:15:58