假设我用C++11 (我将使用Lambdas)将代码编译为".o“或库".a”。我有一个程序,我将在其中包含以前的库和头文件,我不能用C++11编译它们,但要用旧的( C++98 )编译。它能正常编译和工作吗?
发布于 2013-08-07 21:37:59
可能不会。c++中存在名称混乱的原因(为什么ABI会改变)是因为c++版本之间的不兼容性差异会使代码不稳定,如果它能正常工作的话。
如果您的代码不能针对c++11进行编译,那么您可能必须重构其中一个程序以针对另一个编译器进行编译。(最有可能的是用新的编译器编译你的旧代码)
如果不能这样做,您可以尝试使c++11库成为具有C接口或COM对象接口的动态链接库,但是异常将在该边界处停止,如果采用动态链接库的方法,则很可能需要编写一个包装类来访问c++11对象,这样它就像边界的前c++11端的对象一样工作。
发布于 2013-08-07 21:56:48
如果满足以下条件,它将工作得很好:
)标头未使用任何公共功能
中使用
如果第三点是你唯一的问题,你可以通过编译一个动态库(取决于平台,一个.so,或者一个.dynlib,或者一个动态链接库,就像Adrian建议的那样)来解决它,所有的依赖都是在内部静态链接的,并且不会导出。这是一个有点毛发虽然。
发布于 2013-08-07 22:07:47
一种常见的方法是提供一个C版本的应用程序接口(extern "C"函数),它使用不透明的指针传递对象。这更有可能在语言和编译器之间兼容。
https://stackoverflow.com/questions/18104685
复制相似问题