首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >非C++11程序中的C++11代码/库

非C++11程序中的C++11代码/库
EN

Stack Overflow用户
提问于 2013-08-07 21:27:19
回答 3查看 369关注 0票数 4

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

EN

回答 3

Stack Overflow用户

发布于 2013-08-07 21:37:59

可能不会。c++中存在名称混乱的原因(为什么ABI会改变)是因为c++版本之间的不兼容性差异会使代码不稳定,如果它能正常工作的话。

如果您的代码不能针对c++11进行编译,那么您可能必须重构其中一个程序以针对另一个编译器进行编译。(最有可能的是用新的编译器编译你的旧代码)

如果不能这样做,您可以尝试使c++11库成为具有C接口或COM对象接口的动态链接库,但是异常将在该边界处停止,如果采用动态链接库的方法,则很可能需要编写一个包装类来访问c++11对象,这样它就像边界的前c++11端的对象一样工作。

票数 3
EN

Stack Overflow用户

发布于 2013-08-07 21:56:48

如果满足以下条件,它将工作得很好:

  1. ( one

)标头未使用任何公共功能

  • ABI‘t
  • 有关此公共标头的信息,请咨询您的平台/编译器

  1. no common dependency已根据Vaughn Cato链接的GCC文档更改了
    • ,其中包括标准库。任何在用C++11编译时生成不同的代码或对象布局,并且同时被库和客户端使用的东西都可能是一个问题……即使它不在接口itself.

中使用

如果第三点是你唯一的问题,你可以通过编译一个动态库(取决于平台,一个.so,或者一个.dynlib,或者一个动态链接库,就像Adrian建议的那样)来解决它,所有的依赖都是在内部静态链接的,并且不会导出。这是一个有点毛发虽然。

票数 3
EN

Stack Overflow用户

发布于 2013-08-07 22:07:47

一种常见的方法是提供一个C版本的应用程序接口(extern "C"函数),它使用不透明的指针传递对象。这更有可能在语言和编译器之间兼容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18104685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档