我正在安装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 /
但我没有通过。
答案 0 :(得分:0)
链接器搜索路径仅用于库。它不用于查找任何目标文件,包括启动目标文件。
如果工具链是使用sysroot支持构建的,则可以使用--sysroot
来更改GCC查找其大部分文件的位置。这可能需要添加符号链接或复制文件以创建一个有效的sysroot环境,并且可能有些麻烦。
如果只想更改启动文件的位置,则可以使用自定义的GCC规范文件进行更改。不幸的是,您需要使用的内容在某种程度上取决于GCC版本以及GCC的构建方式。这意味着,作为起点,您需要使用GCC内置的规范,您可以使用以下命令获得这些规范:
gcc -dumpspecs
此文件中有两个有趣的部分,*startfile:
和*endfile:
。将这两行及其后的行复制到一个新文件中,例如crt.specs
。编辑它们,并将Scrt1.o
,crt1.o
,crti.o
(在*startfiles:
和crtn.o
(在*endfiles:
)中替换为文件的绝对路径您要使用的文件(使用libc6-dev
从dpkg -x
中提取的大概文件)。
然后您可以通过以下方式调用GCC来使用新规范:
gcc --specs=crt.specs
如果您可以让系统管理员安装libc6-dev
软件包,那么肯定会为您节省很多麻烦。这是确保这些文件与libc6
软件包一起保持最新的唯一安全方法。