我试图将我的应用程序链接到在不同版本的Visual Studio中构建的静态库(我使用VS2010,而lib是用VS2008构建的)。静态库在内部使用STL,并且我收到无法找到某些basic_string方法的链接器错误。

我知道,如果静态库在其公共接口中使用STL,则这是不可能的,因为STL对象是二进制不兼容的。但这种情况并非如此。我要调用的库中的任何方法都没有使用STL,并且没有将任何STL对象传递给库。但是在内部,静态库在其自己的函数中使用STL。

似乎该库中没有编译STL代码,并且链接程序正在尝试将STL链接到内部方法。我的问题是,有什么方法可以编译静态库以静态链接到STL并在其中包含所有代码?

我应该提到我自己的应用程序也使用STL。但是似乎两个版本都可以编译,只要它们彼此之间不会传递。

最佳答案

如果要链接到静态库,并且该库依赖于标准C ++库的版本X,则除了可能要在应用程序中使用的版本Y之外,还需要将应用程序与版本X链接。

由于标准库的版本X和版本Y的几个导出符号名称都相同,因此最终会出现链接器错误。

您可以将第三方库包装到DLL中吗?这样可以解决问题。

关于c++ - 在具有不同版本Visual Studio的静态库中内部使用STL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13146943/

10-13 08:04