ビルドが失敗し、次のリンカーエラーメッセージが表示されます。
失敗:: &&/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.0
とld 2.30
も使用しているDebianテストに基づいて正しく構築されていますが、UbuntuTrustyで動作するbinutils-2.30
ppaがないようです。
Travisでプロジェクトを正常にビルドするにはどうすればよいですか?
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以前。
これを回避するためにできること:
この問題はUbuntu 18.04(LTS)のGcc7で修正されています。
更新が不可能な場合、例えば。 CIシステムで実行している場合でも、Dockerと最新のUbuntuを使用するオプションがあります。
この問題は、UBサニタイザーを有効にしてGCC7を使用した場合にのみ発生します。 tobias-brüll コメントに記載されているように:Turning- UBサニタイザーオフエラーを防ぎます。
makerj によって投稿された別の回避策:Gold Linkerを使用しないt問題を引き起こします。
例えば。 onCMakeそれを CMAKE_EXE_LINKER_FLAGS
に渡します:
cmake -DCMAKE_EXE_LINKER_FLAGS=-Fuse-ld=gold ..
オプション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