web-dev-qa-db-ja.com

ld:認識されないオプション '--Push-state--no-as-needed'

ビルドが失敗し、次のリンカーエラーメッセージが表示されます。

失敗:: &&/usr/bin/g ++ -Wall -Wextra -Werror -g -fsanitize = undefined、address -Wno-unused-parameter -fsanitize = undefined、address -rdynamic * .o -o SCE -Wl、-rpath、/opt/qt59/lib /opt/qt59/lib/libQt5Widgets.so.5.9.1 /usr/local/lib/libprotobuf.a -lpthread -lutil -lgrpc ++ /opt/qt59/lib/libQt5Gui.so.5.9.1 /opt/qt59/lib/libQt5Core.so.5.9.1 &&:
/usr/bin/x86_64-linux-gnu-ld:認識されないオプション '--Push-state--no-as-needed'

完全なビルドログはこちら をご覧ください。エラーは2211行目にあり、バージョンは2104行目以降に出力されます。

どのツールがエラーを引き起こしますか?

  • gcc 7.3.0が誤ったリンカーフラグを使用していますか? ldドキュメント は、--Push-state--no-as-neededが別々のコマンドであることを示します。
  • ld 2.28は古すぎて、リンカーフラグを理解できませんか? 変更ログ には、関連していると思われるものは何もリストされていません。
  • コマンド&& /usr/bin/g++は奇妙に見えます。/usr/bin/g++である必要があります。 makeの代わりにninjaを使用すると、同じリンクエラーが表示されます。

gcc 7.3.0ld 2.30も使用しているDebianテストに基づいて正しく構築されていますが、UbuntuTrustyで動作するbinutils-2.30ppaがないようです。

Travisでプロジェクトを正常にビルドするにはどうすればよいですか?

10
nwp

GCC 7はfixedwith 7.3.0-16ubunt (tested onUbuntu 18.04)。このバージョンは、 buntu Toolchain Test PPA (16.04.1および14.04の場合)から入手できます。

Makeのみでテストされていますが、Ninjaでも動作するはずです。サニタイザー、ASanとUBsanの両方が有効になっています。

changelog でも、この問題とはあまり関係がありません。

gcc-7(7.3.0-16ubuntu3)バイオニック;緊急度=中

  • Gcc-7-branchからSVN20180415(r259389)に更新します。
    • PR libstdc ++/85222を修正しました。
  • 独自のPRlibstdc ++/85222バックポートを削除します。

更新:

GCC 7(7.3.0-16ubuntu3まだ壊れていますbuntu16.04以前

これを回避するためにできること:

A. Ubuntu18.04へのアップデート

この問題はUbuntu 18.04(LTS)のGcc7で修正されています。


B.DockerizeしてUbuntu18.04にアップデートする

更新が不可能な場合、例えば。 CIシステムで実行している場合でも、Dockerと最新のUbuntuを使用するオプションがあります。


C.UBサニタイザーを無効にする

この問題は、UBサニタイザーを有効にしてGCC7を使用した場合にのみ発生します。 tobias-brüll コメントに記載されているように:Turning- UBサニタイザーオフエラーを防ぎます。


D.ゴールドリンカーを使用する

makerj によって投稿された別の回避策:Gold Linkerを使用しないt問題を引き起こします。

例えば。 onCMakeそれを CMAKE_EXE_LINKER_FLAGS に渡します:

cmake -DCMAKE_EXE_LINKER_FLAGS=-Fuse-ld=gold ..
7
ollo

オプションD( ollo の答えから)が機能しない場合は、次のコマンドを試してください。

Sudo add-apt-repository ppa:jonathonf/binutils --yes
Sudo apt-get update -qq --yes
Sudo apt-get install -qq --yes --force-yes binutils

これは次のとおりです: https://github.com/Project-OSRM/osrm-backend/blob/master/scripts/travis/before_install.x86_64-asan.sh

そして、問題はここで説明されました: https://github.com/Project-OSRM/osrm-backend/issues/3216

1
pr3sto