make: i686-linux-gnu-ld: команда не найдена - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу установить cpanm WWW::Curl::Form на моем Synology NAS. Но это не удается. Вот вывод cpanm WWW::Curl::Form WWW::Curl::Easy File::Find::Rule String::CRC32 URI::Escape --> Working on WWW::Curl::Form Fetching http://www.cpan.org/authors/id/S/SZ/SZBALINT/WWW-Curl-4.17.tar.gz ... OK Configuring WWW-Curl-4.17 ... OK Building and testing WWW-Curl-4.17 ... FAIL ! Installing WWW::Curl::Form failed. See /var/services/homes/fox/.cpanm/work/1541095458.25803/build.log

файл журнала дает мне:

make: i686-linux-gnu-ld: Command not found

Но я не знаю, как это исправить на моем Synology NAS (DSM 6.2 и архитектура appollolake DS918 +)

1 Ответ

0 голосов
/ 02 ноября 2018

После рассмотрения ваших дополнительных комментариев, я считаю, что у меня есть потенциальное решение. Похоже, вы пытаетесь установить некоторые модули Perl через оболочку Perl по умолчанию, cpan. В рамках процесса установки запускается утилита make. Эта утилита широко используется для компиляции и сборки исходного кода из C и C++ исходного кода, наряду с другими языками.

Утилита make пытается вызвать исполняемый файл i686-linux-gnu-ld, который является компоновщиком, см. ld . Линкер - это утилита, используемая в C программировании для связывания (объединения) нескольких скомпилированных объектных файлов в один исполняемый двоичный файл. make вызывает эту утилиту как своего рода процесс сборки. Вместо того, чтобы звонить i686-linux-gnu-ld, он, вероятно, должен просто звонить ld. Единственная вещь, в которой я не уверен, - это почему она использует полное имя утилиты вместо ld.

Я могу придумать два решения. Во-первых, обновите файл make, чтобы использовать правильное имя для компоновщика. Я не уверен, как бы вы это сделали, когда он устанавливается через cpan, поскольку он загружает пакет и выполняет make-файл, прежде чем вы сможете изменить его. Другой вариант - создать символическую ссылку из неправильного имени и пути ld, который использует файл make, на правильный путь /opt/bin/ld. Это приведет к вызову ld при вызове i686-linux-gnu-ld. Кроме того, я забыл упомянуть об этом ранее, но команда which сообщит вам, где находится исполняемый файл / команда на пути вашей оболочки.

Сообщение о переполнении стека, Как создать символическую ссылку на файл в Liunx? , дает хорошее объяснение того, как создать символическую ссылку. Вам необходимо создать символическую ссылку, чтобы указать правильное имя и путь компоновщика. Для этого выполните следующую команду:

ln -s /opt/bin/ld /usr/bin/i686-linux-gnu-ld

В зависимости от разрешений этих каталогов вам может потребоваться выполнить эту команду под учетной записью с повышенными правами доступа или через sudo. Я прошу прощения за этот пост довольно длинный и многословный. Я просто хотел подробно объяснить свое решение. Надеюсь, это поможет. Пожалуйста, дайте мне знать, если это не решит проблему.

edit: исправлена ​​опечатка в команде.

...