混合使用std=c++0x和不使用std=c++0x的库的任何问题

Any issues with mixing libraries with and without std=c++0x

本文关键字:std c++0x 任何 问题 混合      更新时间:2023-10-16

我正在编写一个库,该库必须依赖于当前未编译的支持新标准的库。我想编译一个必须依赖于std=c++0x的库的库。这样做有什么问题吗?

如果混合使用不同编译器选项编译的库,则必须确保接口中数据类型的ABI相同。某些数据类型(如std::string)在C++03和C++0x之间有不同的接口和要求,因此使用它们的接口必须小心。

如果你的接口只使用内置类型和你自己的类,而这些类型本身没有使用任何标准库类,那么一切都应该正常。否则,你需要检查你正在使用的特定子集。

简单的答案是否定的,除非供应商明确保证(甚至在那时)。实际上,所有链接在一起的代码都必须使用相同的标准库,并使用相同版本的编译器,使用相同的选项进行编译。有很多方法可以解决这个问题,至少对于动态链接的库来说是这样,但它们只有在库之间的接口是纯C的情况下才有效,并且在链接时需要采取特殊步骤(dlopen的特殊选项——两个库在VC++预版本10中都不使用std::string,等等)。否则,你会遇到麻烦。