gpt4 book ai didi

c++ - G++ 新的 ABI 问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:00 26 4
gpt4 key购买 nike

我在 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:: 部分在某些错误消息中丢失,并且存在在其他)?

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

  • -D_GLIBCXX_USE_CXX11_ABI=0 传递给 GCC,
  • -D_GLIBCXX_USE_CXX11_ABI=1 传递给 GCC,
  • 直接在源代码中设置宏,
  • 在 GCC 提示传递 -Wabi-tag 标志的声明上设置 abi_tag 属性,

不幸的是,它们都不起作用(即允许代码编译)。我知道的一件事是,只有返回 std::string 或将其作为参数的函数才能链接失败。考虑到我在 Internet 上阅读的有关该问题的信息,这是可以预料的。我无法在此处展示的简单示例程序中重现该问题。

对于我的问题,是否有任何明显的解决方案是我遗漏的?

最佳答案

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

如果您要链接一些外部库,除了标准 C++ 库之外,还需要重新编译(并重新安装)这些外部库。

如果您没有与任何外部库链接,而只是将您自己的代码链接在一起,那么您的某些源模块一定还没有被重新编译。重新编译一切。确保使用 make clean 或您正在使用的任何构建系统的等效方法删除所有现有对象模块。

关于c++ - G++ 新的 ABI 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34970607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com