Как добавить каталог в путь поиска GCC (crti.o не найден) - PullRequest
0 голосов
/ 09 февраля 2019

Я устанавливаю GSI V3.5 https://dtcenter.org/com-GSI/users/. У меня нет опыта работы с gcc, поэтому я не могу использовать правильную терминологию для этого.После компиляции программы я получаю ошибку

”...........” /raid60/raid2/opt/local/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu / 7.3.0 /../../../../ x86_64-conda_cos6-linux-gnu / bin / ld: не удается найти Scrt1.o: такого файла или каталога / raid60 / raid2 / нетopt / local / bin /../ lib / gcc / x86_64-conda_cos6-linux-gnu / 7.3.0 /../../../../ x86_64-conda_cos6-linux-gnu / bin / ld: не можетнайти crti.o: нет такого файла или каталога /raid60/raid2/opt/local/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld: не удается найти -lm /raid60/raid2/opt/local/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/ ../../../../x86_64-conda_cos6-linux-gnu/bin/ld: не удается найти -lgomp "

Похоже, существует проблема с gcc, который не может найти каталог, в том числеScrt1.0, crti.o и другие. Я нашел эти файлы в этом каталоге / home / opt / anaconda / x86_64-conda_cos6-linux-gnu / sysroot / usr / lib. Потому что у меня нет преобладания администрации, как sugКонечно, я не мог установить такие пакеты, как libc6-dev.Follwing https://askubuntu.com/questions/251978/cannot-find-crti-o-no-such-file-or-directory И https://askubuntu.com/questions/251978/cannot-find-crti-o-no-such-file-or-directory, Я добавил каталог выше в ~ / .cshrc.

  setenv LD_LIBRARY_PATH
  /home/opt/anaconda/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib

Но gcc по-прежнему не распознает этот путь.

Я также попытался ввести этот путь в конфигурацию, используя LDFLGAS

 > ./configure
 > LDFLAGS="-L/home/opt/anaconda/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib"

Но безуспешно.В конце я добавил LDFLAGS в скрипт configure

.Но это также не сработало.Любая справка сильно преувеличена.

Конечно, ожидаемый ответ заставит gcc идентифицировать путь

файла crti.o и других отсутствующих файлов.

ОБНОВЛЕНИЕ: Как предположил Флориан Ваймер, я создал файл crt.specs.Я также обновил соответствующую строку в конфигурации.Эти файлы находятся в dropbox link .Но я все еще получаю ту же ошибку.

ОБНОВЛЕНИЕ 2. Это несколько строк до появления ошибки:

.. / write_obsdiags.o ../wrwrfmassa,/WRFV3//external/io_int/libwrfio_int.a /opt/local/wrf_kpp/WRFV3//external/io_netcdf/libwrfio_nf.a /opt/local/wrf_kpp/WRFV3//frame/pack_utilk / wf / ofWRFV3 // frame / module_machine.o /opt/local/wrf_kpp/WRFV3//frame/module_driver_constants.o -L / home / srvx11 / lehre / users / a1276905 / .conda / envs / libgsi / lib -lnetcdff -lnetc/home/srvx11/lehre/users/a1276905/.conda/envs/libgsi/lib -L / home / srvx11 / lehre / users / a1276905 / .conda / envs / libgsi / lib -llapack -lblas -fopenmp / raid60 / raid2/opt/local/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld:не может найти Scrt1.o: нет такого файла или каталога

Обновление 3 Я использовал опцию -B, чтобы добавить каталог, включающий crti.o, в путь поиска gcc.когда я вызываю

gcc -print-search-dirs

, я вижу желаемый путь "/ home / opt / anaconda / x86_64-conda_cos6-linux-gnu / sysroot / usr / lib" среди известных путей

библиотека:= / Дом / Opt / Анаконда / x86_64-conda_cos6-Linux-гну / SYSROOT / USR / Lib / x86_64-неизвестно-Linux-гну / 5.3.0 /: / Главная / Opt / Анаконда / x86_64-conda_cos6-Linux-гну /SYSROOT / USR / Lib /: / USR / местные / Библиотека / GCC / x86_64-неизвестно-Linux-гну / 5.3.0 /: / USR / местные / Библиотека / GCC / x86_64-неизвестно-Linux-гну / 5.3.0 /../../../../x86_64-unknown-linux-gnu/lib/x86_64-unknown-linux-gnu/5.3.0/:/usr/local/lib/gcc/x86_64-unknown-linux-гну / 5.3.0 /../../../../ x86_64-неизвестно-Linux-гну / Библиотека /../ lib64 /: / USR / местные / Библиотека / GCC / x86_64-неизвестно-Linux-гну/5.3.0/../../../x86_64-unknown-linux-gnu/5.3.0/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/ ../../../../lib64/:/lib/x86_64-unknown-linux-gnu/5.3.0/:/lib/../lib64/:/usr/lib/x86_64-unknown-linux-gnu/5.3.0/:/usr/lib/../lib64/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../../x86_64-неизвестно-Linux-гну / Библиотека /: / USR / местные / Библиотека / GCC / x86_64-неизвестно-Linux-гну / 5.3.0 /../../../:/ Библиотека /: / USR / Lib/

Но я не до конца.

1 Ответ

0 голосов
/ 09 февраля 2019

Путь поиска компоновщика используется только для библиотек.Он не используется для поиска каких-либо объектных файлов, включая объектные файлы запуска.

Если цепочка инструментов была создана с поддержкой sysroot, вы можете использовать --sysroot, чтобы изменить то, где GCC ищет большинство своих файлов.Это может потребовать добавления символических ссылок или копирования файлов для создания рабочей среды sysroot и может быть несколько громоздким.

Если вы хотите изменить только расположение файлов запуска, вы можете сделать это с помощью специального файла спецификаций GCC.,То, что вам нужно использовать, к сожалению, в некоторой степени зависит от версии GCC и того, как был создан GCC.Это означает, что в качестве отправной точки вам нужно использовать спецификации, встроенные в GCC, которые вы можете получить с помощью этой команды:

gcc -dumpspecs

В этом файле есть два раздела: *startfile: и *endfile:интересны.Скопируйте эти две строки и следующую за ними строку в новый файл, скажем crt.specs.Отредактируйте их и замените Scrt1.o, crt1.o, crti.o*startfiles:) и crtn.o*endfiles:) абсолютным путем к файлам, которые вы хотите использовать (предполагаемые файлы, извлеченные из libc6-dev с использованием dpkg -x).

Затем вы можете использовать новые спецификации, вызывая GCC с помощью:

gcc --specs=crt.specs

Это определенно избавит вас от многих проблем, если вы сможете заставить системного администратора установить пакет libc6-dev,Это единственный безопасный способ обеспечить актуальность этих файлов вместе с пакетом libc6.

...