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

Unix 如何将目录添加到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

我正在安装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之类的软件包 及 , 我将上面的目录添加到~/.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"
但是没有成功。最后,我在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
,因此这可能是它不起作用的原因。我有两个