2015-03-19 646 views
1

我有一個庫foo.a編譯在MinGW。它應該在Windows中工作,因爲它是跨平臺的庫(LibVNCServer)。配置時,我使用了標誌-static--disable-shared。 但是,當我試圖包括在Visual Studio foo.a,我得到了錯誤,如這些:如何在Visual Studio中使用用MingW編譯的庫?

unresolved external symbol ___chkstk_ms 
unresolved external symbol _snprintf 
unresolved external symbol _jpeg_CreateCompress 

我如何編譯源文件中的MinGW使得所得到的庫文件將工作在Windows?我只需要庫,所有依賴包括,所以我可以在Windows上的Visual Studio中無誤地鏈接它。請幫助。

+0

這可能是有趣的:https://github.com/leopucci/libvncserverWindows – drescherjm 2015-03-19 11:40:33

回答

1

庫不僅取決於平臺,還取決於工具集。當你有一個用編譯器A編譯的庫時,你不能假定它可以和編譯器B編譯的程序一起工作。

編譯器之間存在着不同於函數名稱的區別。

  • 調用約定
  • 堆所有權
  • 寄存器保存

任何非平凡的代數可以導致參照特定編譯器運行時除法函數等。

使VS可用的靜態庫foo.a最安全的方法是使用VS編譯源代碼。

+0

並從相同版本的Visual Studio進行編譯。混合版本的Visual Studio將導致超過1個獨立的堆,您不能在應用程序中分配內存,並在dll或viseversa中釋放內存,而不會破壞這些堆中的一個或多個堆以及可能的CRT不兼容性。這不是保存從標準庫傳遞對象,無論是堆和可能的不同實現原因。 – drescherjm 2015-03-19 11:20:53