在具有不同版本的visual studio的静态库中内部使用STL

时间:2012-10-30 20:16:05

标签: c++ visual-studio stl

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

据我所知,如果静态lib在其公共接口中使用STL,那么这是不可能的,因为STL对象是二进制不兼容的。但这种情况并非如此。我调用的lib中的所有方法都没有使用STL,而且我没有将任何STL对象传递给lib。但在内部,静态lib在其自身的功能中使用STL。

看起来该库没有编译到其中的STL代码,并且链接器正在尝试将STL链接到内部方法。我的问题是有没有办法编译静态lib以静态链接STL并包含其中的所有代码?

我应该提一下,我自己的应用程序也使用STL。但似乎两个版本都可以编译,只要它们永远不会相互传递。

1 个答案:

答案 0 :(得分:2)

如果要链接到静态库,并且此库依赖于标准C ++库的 X 版本,那么您的应用程序需要与版本链接 X ,以及您可能在应用程序中使用的 Y 版本。

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

你能在DLL中包装第三方库吗?这样可以解决问题。