簡體   English   中英

與以前版本的Visual Studio構建的第三方靜態庫鏈接時出錯

[英]Error linking with 3rd party static library built with previous version of Visual Studio

我正在一個項目,該項目鏈接到第3方靜態庫(在這里稱為EXTERNALLIB)。 在Visual Studio 2005中,我能夠鏈接到EXTERNALLIB並創建可用的可執行文件。 現在,我們正在使用Visual Studio 2008,並且收到以下錯誤:

fatal error C1047: The object or library file EXTERNALLIB was created with an older compiler than other objects; rebuild old objects and libraries.

有沒有辦法告訴編譯器正確鏈接到EXTERNALLIB? 我認為問題可能與特定的調用約定(__stdcall,__ cdecl,__ clrcall,__ thiscall)有關。 我可以在新程序中指示舊庫的正確調用約定嗎? 是否可以提供給我們的供應商特定的反饋(例如在頭文件中使用API​​ENTRY),以使以后的編譯器升級不會出現此問題?

該代碼用C ++編寫。 我無權訪問EXTERNALLIB的代碼,因此無法自行重建它。

您的問題很可能是由於“代碼是用C ++編寫的”。 C ++鏈接的ABI本質上是完全沒有任何標准指定的,而且眾所周知,在編譯器之間可以更改。 我懷疑VS試圖告訴您ABI再次更改,因此它無法直接鏈接到庫。

想要在DLL中實現C ++對象通常會加劇這個問題,但是幸運的是,您在這里沒有這個問題。

一種可行的解決方案的方法是使用C調用適配器對EXTERNALLIB的已發布API進行外觀設計,並將整個內容鏈接到DLL。 使用較舊的VS版本構建皮膚(最糟糕的是,仍然可以找到免費版本)。 確保僅暴露extern "C"功能。 尤其要確保沒有從DLL公開任何全局對象(盡管它們可能需要存在於您的皮膚中)。

最好的答案是返回給EXTERNALLIB的供應商,並禮貌地報告未能與當前VS鏈接的錯誤,並要求重建版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM