假设我将C++ 11(我将使用Lambdas)中的代码编译为“.o”或库“.a”。
我有一个程序,其中将包含以前的库和头文件,该程序不能用C++ 11编译,而可以用旧的(C++ 98)编译。
它可以编译并正常工作吗?

最佳答案

如果满足以下条件,它将正常工作:

  • (public) header 不使用任何C++ 11功能
  • ABI尚未更改
  • 请教您的平台/编译器
  • 通用的依赖关系没有改变

    按照Vaughn Cato链接的GCC文档的
  • ,其中包括标准库。用C++ 11编译时生成不同代码或对象布局,并且库和客户端都使用的任何东西都可能是一个问题……即使接口(interface)本身未使用它。

  • 如果第3点是您唯一的问题,则可以通过编译一个动态库(取决于平台,如.so,.dynlib或Adrian所建议的DLL)来解决此问题,该库的所有依赖项在内部都是静态链接的,而不是导出的。虽然有点毛。

    09-10 04:24
    查看更多