我使用cygwin生成了dll文件,我試圖在Visual Studio中使用它。在C++中名稱修飾或名稱損壞
- 我得到了DEF(.def)文件,這個文件中包含了錯誤的函數名稱,作爲cygwin編譯的一部分。
- 使用lib.exe程序作爲MSVC的一部分,我生成了.lib文件。
在MSVC中,我編寫了一個程序,它使用創建的lib文件中的函數。
我得到了鏈接器錯誤。 當我檢查了重名的名稱時,DEF文件中的名稱與MSVC中引發的錯誤中的名稱不同。 我把這兩個都去掉了,發現MSVC用__cdecl
這個關鍵字破壞了函數名。
如何在012g關鍵字中在cygwin中創建破損的函數名稱?我在cgwin編譯中缺少任何標誌嗎?
的Visual Studio:
重整名稱:??
(__imp_ configure_tls_context @客戶@ asio_http2 @ nghttp2 @@ YA AVerror_code @系統@升壓@@ AAV456 @ AAVcontext @ SSL @ ASIO @ 6 @@ Z)
Demangled名稱:
(__imp_class的boost ::系統:: ERROR_CODE __cdecl nghttp2 :: asio_http2 ::客戶:: CONF igure_tls_context(類 的boost ::系統:: ERROR_CODE &,類boost ::支持ASIO :: SSL ::背景&)
從Cygwin的DEF文件: 重整名稱:
_ZN7nghttp210asio_http26client21configure_tls_contextERN5boost6system10error_codeERNS2_4asio3ssl7contextE
Demangled name:
nghttp2 :: asio_http2 ::客戶:: configure_tls_context(升壓::系統:: ERROR_CODE &,升壓:: ASIO :: SSL ::上下文&)
這不僅僅是你必須處理的名字,還可能是調用約定和其他問題,比如POSIX兼容性。爲什麼不簡單地用VC++重新編譯庫?或者用Cygwin GCC編譯所有東西。 –
我遵循以下鏈接https://cygwin.com/faq/faq.html#faq.programming.msvcrt-and-cygwin中的步驟。基於該鏈接中提供的解決方案,我認爲在cygwin中生成的dll可以在MSVC中使用,並且我在Cygwin中缺少一些編譯器標誌,因此我正面臨鏈接器錯誤。用VC++重新編譯庫是我的最後手段。 –