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



我正在安装GSI V3.5https://dtcenter.org/com-GSI/users/.我没有gcc的经验,所以我不能使用正确的术语。编译程序后,我得到一个错误

"。。。。。。。。。。。"/raid60/raid2/opt/local/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../x86_64-condon_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_cos 6-linux-g努/bin/ld:找不到crti.o:没有这样的文件或目录/raid60/raid2/opt/local/bin//lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../x86_64-conda_cos 6-linux-g努/bin/ld:找不到-lm/raid60/raid2/opt/local/bin//lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../x86_64-conda_cos 6-linux-g努/bin/ld:找不到-lcomp">

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
> LDFLAGS="-L/home/opt/anaconda/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib"

但没有成功。最后,我在配置中添加了LDFLAGS

脚本。但它也没有奏效。任何帮助都是极度不安的。

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

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

更新:正如Florian Weimer所建议的,我制作了crt.specs文件。我还更新了配置中的相关行。这些文件在dropbox链接中。但我还是犯了同样的错误。

更新2.以下是错误发生前的几行:

/write_obsdiags.o../wrwrfmassa.o.../wrwrfnmma.o-L/opt/local/wrf_kpp/gsi35/comGSIv3.5_EnKFv1.1/lib-lsp_i4r8-lsigio_i4r4-lsfcio_i4r 4-lnemsio-lbacio-lw3ncoi4r 8-lbufr_i4 r8-lw3emc_i4r 8-lctrm/opt/local/wrf_kpp/WRFV3//external/io_int/libwrfio_int.a/opt/local/wrf_kpp/WRFV3//external/io_netcdf/libwrfo_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/uusers/a1276909/.condaenvs/libgsi/lib-L/homesrvx11/lehre/user/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_cos 6-linux-g努/bin/ld:找不到Scrt1.o:没有这样的文件或目录

Update3我使用选项-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/5.3.0/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../x86_64未知的linux gnu/lib//lib64/:/usr/local/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/../../x86_64-unknown-linux-gnu/55.3.0/:/usr/local-lib/gcc/x86_64-nonknown-linux-gnu/5.3.0\../../../lib64/;/lib/x86_6d-unknown-linux-gnu/5.4.0/6_64-unknown-linux-gnu/5.3.0/../../../x86_64-unknown-linux-gnu/lib/:/usr/local/lib/gcc/x86_64-un已知的linux gnu/5.3.0/../../:/lib/:/usr/lib/

但我还没说完。

链接器搜索路径仅用于库。它不用于定位任何对象文件,包括启动对象文件。

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

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

gcc -dumpspecs

该文件中有两个感兴趣的部分,*startfile:*endfile:。将这两行和后面的每一行复制到一个新文件中,比如crt.specs。编辑它们,并将Scrt1.ocrt1.ocrti.o(在*startfiles:中)和crtn.o(在*endfiles:中)替换为要使用的文件的绝对路径(使用dpkg -xlibc6-dev提取的假定文件)。

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

gcc --specs=crt.specs

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

相关内容

  • 没有找到相关文章

最新更新