如何将目录添加到GCC的搜索路径(找不到crti.o)

时间:2019-02-09 15:04:38

标签: unix gcc csh

我正在安装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。 。因为我没有建议的管理特权,所以我可以       不要安装libc6-dev之类的软件包。追随       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中

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

但是没有成功。最后,我将LDFLAGS添加到configure

脚本。但这也没有用。非常感谢您。

当然,预期的答案是让gcc识别路径

crti.o和其他丢失的文件。

更新: 正如Florian Weimer所建议的那样,我创建了文件crt.specs。我还更新了configure中的相关行。这些文件位于dropbox link中。但是我仍然遇到相同的错误。

更新2。 这些是发生错误之前的几行:

  

../ write_obsdiags.o ../wrwrfmassa.o ../wrwrfnmma.o   -L / opt / local / wrf_kpp / gsi35 / comGSIv3.5_EnKFv1.1 / lib -lsp_i4r8 -lsigio_i4r4 -lsfcio_i4r4 -lnemsio -lbacio -lw3nco_i4r8 -lbufr_i4r8 -lw3emc_i4r8 / l / 3_c / i4r8 libwrfio_int.a   /opt/local/wrf_kpp/WRFV3//external/io_netcdf/libwrfio_nf.a   /opt/local/wrf_kpp/WRFV3//frame/pack_utils.o   /opt/local/wrf_kpp/WRFV3//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 -lnetcdf -L / 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”

  

图书馆:   = / home / opt / anaconda / x86_64-conda_cos6-linux-gnu / sysroot / usr / lib / x86_64-unknown-linux-gnu / 5.3.0 /:// home / opt / anaconda / x86_64-conda_cos6-linux-gnu / sysroot / usr / lib /:/ usr / local / lib / gcc / x86_64-unknown-linux-gnu / 5.3.0 / :: / usr / local / lib / gcc / x86_64-unknown-linux-gnu / 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- gnu / 5.3.0 /../../../../ x86_64-unknown-linux-gnu / lib /../ lib64 /:/ usr / local / lib / gcc / x86_64-unknown-linux-gnu /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-unknown-linux-gnu / lib /:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../../:// lib /:/ usr / lib /

但我没有通过。

1 个答案:

答案 0 :(得分:0)

链接器搜索路径仅用于库。它不用于查找任何目标文件,包括启动目标文件。

如果工具链是使用sysroot支持构建的,则可以使用--sysroot来更改GCC查找其大部分文件的位置。这可能需要添加符号链接或复制文件以创建一个有效的sysroot环境,并且可能有些麻烦。

如果只想更改启动文件的位置,则可以使用自定义的GCC规范文件进行更改。不幸的是,您需要使用的内容在某种程度上取决于GCC版本以及GCC的构建方式。这意味着,作为起点,您需要使用GCC内置的规范,您可以使用以下命令获得这些规范:

gcc -dumpspecs

此文件中有两个有趣的部分,*startfile:*endfile:。将这两行及其后的行复制到一个新文件中,例如crt.specs。编辑它们,并将Scrt1.ocrt1.ocrti.o(在*startfiles:crtn.o(在*endfiles:)中替换为文件的绝对路径您要使用的文件(使用libc6-devdpkg -x中提取的大概文件)。

然后您可以通过以下方式调用GCC来使用新规范:

gcc --specs=crt.specs

如果您可以让系统管理员安装libc6-dev软件包,那么肯定会为您节省很多麻烦。这是确保这些文件与libc6软件包一起保持最新的唯一安全方法。