我正在安装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.o
、crt1.o
、crti.o
(在*startfiles:
中)和crtn.o
(在*endfiles:
中)替换为要使用的文件的绝对路径(使用dpkg -x
从libc6-dev
提取的假定文件)。
然后,您可以通过调用GCC来使用新规范,使用:
gcc --specs=crt.specs
如果你能让系统管理员安装libc6-dev
包,肯定会为你省去很多麻烦。这是确保这些文件与libc6
包一起保持最新的唯一安全方法。