2015-03-19 648 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