加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – G新的ABI问题

发布时间:2020-12-16 05:00:25 所属栏目:百科 来源:网络整理
导读:我在GCC中为C 11引入的新ABI遇到了问题.升级到GCC 5.3后,我的项目不再编译.我得到的错误消息很简单: undefined reference to `tokenize(std::__cxx11::basic_string' ...more characters 要么 undefined reference to `extract(std::string const)' 所以,看
我在GCC中为C 11引入的新ABI遇到了问题.升级到GCC 5.3后,我的项目不再编译.我得到的错误消息很简单:
undefined reference to `tokenize(std::__cxx11::basic_string'  ...more characters

要么

undefined reference to `extract(std::string const&)'

所以,看起来我搞砸了一些事情并且GCC无法决定我是否需要旧的ABI或新的ABI(某些错误消息中缺少__cxx11 :: part,并存在于其他错误消息中)?

我尝试了几种解决方案来解决这个问题:

>将-D_GLIBCXX_USE_CXX11_ABI = 0传递给GCC,
>将-D_GLIBCXX_USE_CXX11_ABI = 1传递给GCC,
>直接在源代码中设置宏,
>在传递-Wabi-tag标志时,GCC抱怨的声明设置abi_tag属性,

不幸的是,它们都没有工作(即允许代码编译).我知道的一件事是只有返回std :: string或将其作为参数的函数无法链接.考虑到我在互联网上阅读的问题,我们可以预料到这一点.我无法在一个简单的示例程序中重现该问题,以便在此处显示它.

我的问题有没有明显的解决方案,我错过了?

解决方法

此错误表示您正在链接到某些尚未由gcc 5.3重新编译的代码或库,并且是使用早期版本的ABI由早期版本的gcc编译的.

如果要链接某些外部库,除标准C库外,还需要重新编译(并重新安装)这些外部库.

如果您没有链接任何外部库,并且只是将自己的代码链接在一起,那么您的某些源模块肯定不会被重新编译.重新编译一切.确保擦除所有现有的对象模块,使用make clean,或者等同于您正在使用的任何构建系统.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读