Золотой линкер ld.gold -plugin: неизвестная опция

Я пытаюсь построить Google, следуя инструкциям по началу работы, и я дошел до раздела "Сборка".

Когда я выпускаю либо

ninja -C out/Debug

или же

ninja -C out/Release

Я получаю следующую ошибку: Я также разместил вывод в pastebin, если вы предпочитаете

ninja -C out/Debug
ninja: Entering directory `out/Debug'
[3/2606] LINK genmacro
FAILED: cc -Wl,-z,now -Wl,-z,relro -Wl,--fatal-warnings -pthread -Wl,-z,noexecstack -fPIC -B/home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin -Wl,--disable-new-dtags -m64 -Wl,--icf=none -fuse-ld=gold -Wl,--gdb-index -o genmacro -Wl,--start-group obj/third_party/yasm/source/patched-yasm/tools/genmacro/genmacro.genmacro.o  -Wl,--end-group 
/home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold: -plugin: unknown option
/home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold: use the --help option for usage information
collect2: error: ld returned 1 exit status
[3/2606] CC obj/net/third_party/nss/ssl/libssl.sslauth.o
ninja: build stopped: subcommand failed.

Я старался

ld.gold --help | grep "plugin"

и получил:

--plugin PLUGIN             Load a plugin library
--plugin-opt OPTION         Pass an option to the plugin

Итак, я полагаю, что ошибка, которую я получаю, заключается в том, что где-то в коде ld.gold вызывается с -plugin xxx скорее, чем --plugin xxx

Я "играл" с grep -Hr и различные комбинации "плагинов", чтобы попытаться найти проблему, но пока я ничего не нашел. Я предполагаю, что это спрятано где-то в Makefile.

1 ответ

Решение

Проблема не в том, что -plugin вариант должен быть --plugin, ld.gold принимает оба варианта, если принимает любой из них.

Но он принимает только один из них, если сборка binutils был настроен с --enable-plugins, Документация

Когда ты бежишь ld.gold --help | grep "plugin" вывод показывает, что --plugin это признанный вариант.

Следовательно, проблема заключается в следующем:

/home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold не был настроен с --enable-plugins

Когда ты бежишь ld.gold --help | grep "plugin" ты выполняешь первый ld.gold что находится на вашем PATH, Это наверное /usr/bin/ld.gold из вашего дистрибутива. Вы можете узнать, запустив:

which ld.gold

Во всяком случае, это не /home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin/ld.gold и это ld.gold который был настроен с --enable-plugins

если ты cd в /home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils/Linux_x64/Release/bin/ и запустить:

 ./ld.gold -plugin

ты получишь:

./ld.gold: -plugin: unknown option

Чтобы решить проблему, идеальное решение - восстановить /home/nschoe/workspace/webrtc/jingle/trunk/third_party/binutils согласно этой документации

Если вы не можете восстановить эти третьи стороны binutils из источника, это, вероятно, будет работать, если вы просто скопировать систему ld.gold обнаружен which по сравнению с третьим лицом binutils или удалите / переименуйте сторонний и замените его символической ссылкой на системный. Существует внешняя вероятность, что любой из этих хаков вызовет у вас какой-то неясный перелом.

Другие вопросы по тегам