【发布时间】:2012-10-30 20:16:05
【问题描述】:
我正在尝试将我的应用程序与在不同版本的 Visual Studio 中构建的静态库链接(我使用的是 VS2010,该库是使用 VS2008 构建的)。静态库在内部使用 STL,我收到一些基本字符串方法无法找到的链接器错误。
我知道如果静态库在其公共接口中使用 STL,那么这是不可能的,因为 STL 对象是二进制不兼容的。但这种情况并非如此。我调用的库中的所有方法都没有使用 STL,并且我没有将 STL 对象传递给库。但在内部,静态库在它自己的函数中使用 STL。
看起来库中没有编译 STL 代码,链接器正在尝试将 STL 链接到内部方法。我的问题是有什么方法可以编译静态库以静态链接到 STL 并包含其中的所有代码?
我应该提到我自己的应用程序也使用 STL。但似乎这两个版本都可以编译,前提是它们永远不会相互传递。
【问题讨论】:
-
混合版本的问题是库和类/函数名称会相同,所以只能链接一个版本。
-
@Mark Ransom:不过,这在此处不重要。当他链接他的应用程序时,他不应该对标准库的库版本有任何依赖——在链接该库时它们已经被解决了。当然,这假设在该库的公共界面中的任何地方都使用了 no
std::string。 -
我纠正自己!我没有注意到他正在链接到一个 static 库。是的,那就不行了。
标签: c++ visual-studio stl