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

标签 c++ visual-studio stl

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

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

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

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

最佳答案

如果您要链接到一个static 库,并且该库依赖于标准 C++ 库的 X 版本,那么您的应用程序需要与版本链接X,除了您可能在应用程序中使用的 Y 版本。

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

能不能把第三方库封装成一个DLL?这将解决问题。

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

相关文章:

visual-studio - 是否可以让 Visual Studio 索引源代码以改进字符串搜索?

c++ - 在容器中查找高于阈值的最大和最小元素

visual-studio - VS 2012 的 TFS 默认合并工具的命令行参数是什么?

javascript - 在不同的文件中为 js 获取 VS javascript intellisense

c++ - 对象中的 std::string 在 push_back 到 std::vector 期间被删除

c++ - 我有以下使用对作为键的 map 的用法,它会出现段错误。有任何想法吗?

c++ - 子文件夹中的各种库,如何将它们导出到父文件夹?

c++ - OpenSSL和JSON文件加解密

c++ - 智能指针 : cast between base and derived classes

c++ - STL算法查找范围内第一个元素的所有元组