混合使用std=c++0x和不使用std=c++0x的库的任何问题
Any issues with mixing libraries with and without std=c++0x
我正在编写一个库,该库必须依赖于当前未编译的支持新标准的库。我想编译一个必须依赖于std=c++0x的库的库。这样做有什么问题吗?
如果混合使用不同编译器选项编译的库,则必须确保接口中数据类型的ABI相同。某些数据类型(如std::string
)在C++03和C++0x之间有不同的接口和要求,因此使用它们的接口必须小心。
如果你的接口只使用内置类型和你自己的类,而这些类型本身没有使用任何标准库类,那么一切都应该正常。否则,你需要检查你正在使用的特定子集。
简单的答案是否定的,除非供应商明确保证(甚至在那时)。实际上,所有链接在一起的代码都必须使用相同的标准库,并使用相同版本的编译器,使用相同的选项进行编译。有很多方法可以解决这个问题,至少对于动态链接的库来说是这样,但它们只有在库之间的接口是纯C的情况下才有效,并且在链接时需要采取特殊步骤(dlopen
的特殊选项——两个库在VC++预版本10中都不使用std::string
,等等)。否则,你会遇到麻烦。
相关文章:
- -std=c++0x 导致在 boost 1.64 的情况下返回对临时的引用
- Unix 宏在使用 -std=c++0x 标志编译时变得未定义
- G-WAN cc1plus:错误:无法识别的命令行选项"-std=gnu++0x"
- g++-std=c++0x及其兼容性
- g++ 不会在 Snow Leopard 下编译 std=c++0x
- "stoi"没有在此范围内声明,即使添加 -std=c++0x 和自定义函数,仍然适用
- C++11 统一初始化不适用于"g++ -std=c++0x"
- ISO C++禁止声明 .没有设置 --std=c++0x 的类型
- 将 -std=c++0x 与 gfortran 一起使用
- 如何在 eclipse makefile 项目中的编译器选项中设置 -std=c++0x
- gem install nmatrix - 你需要一个支持 -std=c++0x 或 -std=c++11 的 g++
- 尝试通过CGAL_CXX_FLAGS设置 --std=c++0x 或 -std=gnu++0x 会忽略值
- 适用于 MacOS 的"-std=gnu++0x"选项
- 在 G++ 编译命令中包含 -std=c++0x 有什么意义?
- 启用-std=c++0x或-std=gnu++0x编译器选项
- c++-std=c++0x导致分段错误(提升日志记录)
- G++ 4.6 -std=gnu++0x:静态局部变量构造函数调用计时和线程安全
- 警告:扩展初始值设定项列表仅适用于-std=c++0x或-std=gnu++0x
- g++ 4.4.7 -std=gnu++0x 应该编译"for each"结构吗?
- cc1plus:错误:无法识别的命令行选项"-std=c++0x"