2010-01-19 296 views
41

我試圖使用xlsLib從C++應用程序創建Excel電子表格。從MinGW靜態庫(.a)到Visual Studio靜態庫(.lib)

問題是,編譯xlsLib,我給了一個.a文件(一個GCC靜態庫,由MinGW生成)。但是,我的應用程序依賴於僅與Visual Studio一起編譯的另一個API(PhysX)。

因此:是否有可能將GCC靜態庫(xlslib.a)轉換爲Visual Studio靜態庫文件(xlslib.lib)?

回答

-1

據我所知,它們是一樣的東西。 Visual Studio的.lib文件也是ar包含目標文件的檔案。你嘗試重命名文件嗎? :)

+7

不,這不是那麼簡單,實際的歸檔格式稍有不同。 – laura 2010-01-19 19:52:55

+0

我相信還有一個工具lib.exe隨Visual Studio一起提供。使用.def文件可以將.a轉換爲.lib。 – jiggunjer 2015-10-19 16:23:03

32

使用MinGW生成的靜態庫的檔案通常與Visual C++編譯器/鏈接器兼容。所以,你應該能夠直接通過添加.a文件鏈接器輸入你的項目屬性在Visual Studio中使用它們:

  1. 轉到項目Properties(ALT-F7)。
  2. 在左側中,您需要使用
  3. 所有.a檔案的開放Configuration Properties->Linker->Input
  4. 添加列表您可能還需要添加的MinGW的libgcc.a

此外,關於混合的C有可能發生的問題運行時庫properties of C/C++->Code Generation->Runtime Library,但這取決於您使用MinGW的構建配置。有時需要與MinGW的libmsvcrt.a鏈接,但在許多情況下(如果不是大多數情況下)會導致問題。據我所知,最後,這種混合的MinGW和Visual C++鏈接通常適用於C模塊,但它不適用於C++。

+0

但使用.a導致我的.exe無法調試「無法找到調試信息」。 – onmyway133 2013-05-22 12:27:28

+3

@ onmyway133檢查調試符號是否仍然存在。您可以使用例如'nm --debug-syms',如果二進制文件被刪除,它就會顯示«no symbols»。 – 2014-08-29 16:09:45

+1

添加libgcc.a對我很重要 – meolic 2015-04-15 13:07:41

4

但使用.a導致我的.exe無法調試「無法找到調試信息」。 - 熵5月22日12:27

這是因爲.a庫不包括調試所需的調試信息。如果你想調試它,你需要告訴編譯器在編譯時添加調試信息。 (MinGW版本),你需要在運行「make」添加「-g」到CFLAGS,像「make CFLAGS="-g"