web-dev-qa-db-ja.com

GLIBCXX_3.4.21は、リンク時間参照を含むファイルlibstdc ++。so.6で定義されていません

おApび申し上げますが、これに非常によく似た質問が比較的頻繁に寄せられていることを理解していますが、解決策はどれも私には役に立たないようです。完全なエラーメッセージは次のとおりです。

/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インストールのエラーだと思ったので、今日はそれを再インストールしましたが、それはまったく役に立ちませんでした。私はこれを修正するために何をすべきか本当にわかりません、誰でも支援を提供できますか?

これは、プロジェクトの1つをコンパイルするために使用している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を実行しています。

9
asharkdoctor

GCC 5.1または5.2(今は思い出せない、グーグル)はC++ ABIを変更しました。標準のubuntu(libstdc ++を含む)は古いABIでコンパイルされています。

Gccコンパイラは、新しいABIを使用しようとします。時にはそれが機能することもあります-ほとんどの場合-いいえ。

したがって、コードをコンパイルするには3つの方法があります。

1)gccのダウングレード

2)-D_GLIBCXX_USE_CXX11_ABI = 0(cmakeの例)フラグを追加します(この方法を使用する場合は、ubuntuをアップグレードするか、gccをダウングレードするまで、ビルドするすべてのメイクファイルまたはプロジェクトにこのフラグを追加する必要があります)

3)Ubuntuをアップグレードします(16.04がデフォルトで新しいABIおよび新しいgccに対応する方法で、すべてのペットプロジェクトからack-grepして上記のフラグを削除する必要がありました)

また、 GCC 5の_GLIBCXX_USE_CXX11_ABIまたは新しいABIについて

追伸面白いことに、答えは質問にあります:_ZNSt7__cxx11CXX11、ただしエラーメッセージは実際には読みません。

18
strangeqargo

before_install:

この回避策は、SASSサポート付きの「拡張」hugoの実行中にlibstdc ++エラーを回避するために必要です。

  • wget -q -O libstdc++6 http://security.ubuntu.com/ubuntu/pool/main/g/gcc-5/libstdc++6_5.4.0-6ubuntu1~16.04.10_AMD64.deb
  • Sudo dpkg --force-all -i libstdc ++ 6

    インストール:

  • wget -q -O hugo.deb https://github.com/gohugoio/hugo/releases/download/v0.46/hugo_extended_0.46_Linux_64bit.deb

  • Sudo dpkg -i hugo.deb

私はこの答えを見つけました ここ 、そしてそれは私のために働いた