簡體   English   中英

使用VS2008為64位Windows平台編譯C ++靜態庫

[英]compiling C++ static library for 64 bit windows platform using VS2008

在Visual Studio 2008中,如果配置類型是靜態庫,我在項目屬性中看不到鏈接器選項。 我需要為靜態庫指定/ MACHINE:x64選項。 我試圖在Librarian的命令行選項中指定它。 只有這樣我才能構建靜態庫。 如果我沒有指定/ MACHINE編譯靜態庫使用LNK1112失敗:模塊機器類型'X86'與目標機器類型'x64'沖突(即使我將平台設置為X64用於我的解決方案)。

使用/ MACHINE:X64通過Project-Properties-Librarian指定為命令行,構建了靜態庫,但是同一解決方案中的其他項目(配置類型:DLL)依賴於靜態庫,當構建DLL並嘗試使用lib中的一個函數我再次得到相同的錯誤:

致命錯誤LNK1112:模塊機器類型'X86'與目標機器類型'x64'沖突

請建議,如何構建64位靜態庫

對於它的價值,我遇到了同樣的問題。

我有一個編譯靜態庫的項目,並且創建“x64”配置並沒有實際定位到x64。 我必須在項目的屬性頁面中明確地將“/ MACHINE:X64”添加為“Librarian - > Command Line”下的“附加選項”,就像你一樣。

我希望visual studio將此設置公開為屬性頁中的第一類屬性,就像動態庫一樣(在“鏈接器 - >高級 - >目標機器”下)。 也許我錯過了一些東西。

正如Timbo所提到的,您需要確保擁有正在構建的x64配置。 但是,還有其他一些需要注意的問題:

  • 首先要徹底清理你的構建目錄,以防你仍然有一些32位目標文件,這會導致混亂
  • 檢查項目的中間和輸出目錄。 如果目標是Debug\\Mylib.lib那么您將遇到問題,因為32位和64位庫使用相同的名稱。 我更喜歡選擇所有配置和所有平台,然后將它們全部重命名為標准,如..\\build\\$(ProjectName)\\$(ConfigurationName).$(PlatformName)
  • 檢查配置管理器,在構建解決方案的64位配置時,將其配置為構建項目的64位配置(默認情況下並不總是這樣)
  • 錯誤: module machine type 'X86' conflicts with target machine type 'x64'意味着目標文件已構建為32位,但項目的鏈接設置使用flag /machine:x64 所以這表明項目配置是32位。
  • 如果對您創建的內容有疑問,請選擇一個目標文件並在命令提示符下鍵入:

    dumpbin /headers myfile.obj | findstr machine

這將向您展示您實際構建的體系結構。

您是否嘗試將新項目配置(x64)添加到現有項目中?

您通常不必編輯項目屬性以構建64位。 您只需添加配置並確保解決方案配置正確(64位解決方案配置包含64位項目配置)。

您可以通過打開Build-> Configuration Manager來檢查這一點。 我的Visual Studio有時會混淆這些設置並使項目無法編譯,因此再次檢查可能會有所幫助。

暫無
暫無

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

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