gpt4 book ai didi

c++ - GLIBCXX_3.4.21 未在具有链接时间引用的文件 libstdc++.so.6 中定义

转载 作者:可可西里 更新时间:2023-11-01 16:28:05 30 4
gpt4 key购买 nike

抱歉,我知道与此非常相似的问题被问得比较频繁,尽管似乎没有一种解决方案适合我。当尝试运行任何具有合理复杂性的 C++ 代码时,我收到上述错误。完整的错误信息是:

/main: relocation error: ./main: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

运行另一个项目,我得到一个非常相似的错误:

./main: relocation error: ./main: symbol _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1Ev, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference

我实际上对编译没有任何问题,因为这些项目都可以正常编译。当我尝试运行可执行文件时,就会发生这种情况。我认为这是我的 gcc 安装错误,所以今天我重新安装了它,尽管那根本没有帮助。我真的不知道该怎么做才能解决这个问题,有人可以提供帮助吗?

这是我用来编译其中一个项目的 Makefile,我觉得这可能是错误所在:

CC= g++
CFLAGS= -Wall -g -std=c++11 -lX11 -lpthread
OBJS = main.o Board_Tile.o Sliding_Solver.o

main: $(OBJS)
$(CC) -o $@ $(OBJS)
%.o : %.cc
$(CC) $(CFLAGS) -c $^

我的 gcc 版本是 5.3.0,我运行的是 Ubuntu 14.0.4。

最佳答案

GCC 5.1 或 5.2(现在不记得了,google 一下)改变了 C++ ABI。你的标准 ubuntu(包括 libstdc++)是用旧的 ABI 编译的。

您的 gcc 编译器尝试使用新的 ABI。有时它有效,但大多数时候 - 没有。

所以,有 3 种方法来编译你的代码:

1) 降级gcc

2) 添加 -D_GLIBCXX_USE_CXX11_ABI=0(cmake 示例)标志(如果你这样做,你应该将这个标志添加到你构建的每个 makefile 或项目中,直到你升级 ubuntu 或降级 gcc)

3) 升级 Ubuntu(测试过,16.04 默认带有新的 ABI 和新的 gcc,我不得不 ack-grep 并从我所有的宠物项目中删除上面提到的标志)

还有:Understanding GCC 5's _GLIBCXX_USE_CXX11_ABI or the new ABI

附言有趣的是,答案在问题中:_ZNSt7__cxx11 : CXX11,尽管我们并没有真正阅读错误消息。

关于c++ - GLIBCXX_3.4.21 未在具有链接时间引用的文件 libstdc++.so.6 中定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36816570/

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