Unix 如何将目录添加到GCC的搜索路径(未找到crti.o)
我正在安装GSIv3.5。我没有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\u 64-conda\u cos6-linux-gnu/sysroot/usr/lib.因为我没有管理权限,所以我可以 不安装libc6-dev.folling之类的软件包 及 , 我将上面的目录添加到~/.cshrcUnix 如何将目录添加到GCC的搜索路径(未找到crti.o),unix,gcc,csh,Unix,Gcc,Csh,我正在安装GSIv3.5。我没有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/gc
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"
但是没有成功。最后,我在configure中添加了LDFLAGS
剧本。但它也不起作用。任何帮助都是非常恰当的
当然,预期的答案是让gcc识别路径
包括crti.o和其他丢失的文件
更新:
正如Florian Weimer所建议的,我创建了crt.specs文件。我还更新了配置中的相关行。这些文件在中。但我还是犯了同样的错误
更新2。
以下是发生错误前的几行代码:
../write_obsdiags.o../wrfmassa.o../wrwrfnma.o../wrfnma.o
-L/opt/local/wrf_kpp/gsi35/comGSIv3.5_EnKFv1.1/lib-lsp_i4r8-lsgio_i4r4-lsfcio_i4r4-lnemsio-lbacio-lw3nco_i4r8-lw3emc_i4r8-lcrtm/opt/local/wrf_kpp/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_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/libgsi/lib-L-L/home/srvx11/lehre/users/a1276905/.conda/envs/libgsi/lib-llapack-lblas-fopenmp/raid60/raid2/opt/local/bin//lib/gcc/x86/conda/cos6-cos6/linux-gnu/condu/.64/
找不到Scrt1.o:没有这样的文件或目录
更新3
我使用选项-B将目录(包括crti.o)添加到gcc的搜索路径中。
当我调用
gcc -print-search-dirs
我在已知路径中看到了我想要的路径“/home/opt/anaconda/x86_64-conda_cos6-linux-gnu/sysroot/usr/lib”
图书馆:
7/1////2/hom////4/hom///2//4///2/1//2/lib//4/8/8/8 8/8 8/6/8 8 8 8/6/6/6/8/8/7/4/4/6/7/7/7///////1/2/2/1/1/1/1/1/1/1/1/2/1/2/4/4/4/8/8/8/8/8/8/8/8/8/8/8/8 8 8 8 8 8 8 8/6/8/8/8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8/6/6/6/8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 r/local/lib/7.0/////////////////////////////////////////////////////////////////////////////////////////////8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8月未未知-4-未知-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-linux-GN努努努努努努努--linux-linux-linux-linux-linux-linux-linux-GN努努努努努/////////////全国全国全国全国全国全国////////////////////////////1 1 1 1 1 1//:/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/../../../../../../../../../../../usr/lib/
但我还没有完成。链接器搜索路径仅用于库。它不用于定位任何对象文件,包括启动对象文件 如果工具链是使用sysroot支持构建的,那么可以使用
--sysroot
更改GCC查找其大多数文件的位置。这可能需要添加符号链接或复制文件来创建一个正常工作的sysroot环境,这可能有点麻烦
如果只想更改启动文件的位置,可以使用自定义GCC规范文件进行更改。不幸的是,您需要使用的内容在某种程度上取决于GCC版本和GCC的构建方式。这意味着,作为起点,您需要使用GCC中内置的规范,您可以使用以下命令获得这些规范:
gcc -dumpspecs
此文件中有两个相关部分,*开始文件:
和*结束文件:
。将这两行和每行后面的行复制到一个新文件中,例如crt.specs
。编辑它们并将它们替换为Scrt1.o
、crt1.o
、crti.o
(在*开始文件:
)和crtn.o
(在*结束文件:
)与要使用的文件的绝对路径(使用dpkg-x
从libc6 dev
提取的可能文件)
然后,您可以通过以下方式调用GCC来使用新规范:
gcc --specs=crt.specs
如果您能让系统管理员安装
libc6 dev
软件包,肯定会为您节省很多麻烦。这是确保这些文件与libc6
软件包一起保持最新的唯一安全方法。亲爱的@Florian Weimer,感谢您的回复。我已经执行了你的建议。但我也犯了同样的错误。我将添加已创建的文件(crt.specs)并在更新我的问题时进行配置。您是否验证了specs文件的实际使用情况LDFLAGS
不显示specs=/path/to/crt.specs
,因此这可能是它不起作用的原因。我有两个