12

我正在尝试编译一个测试文件:

gcc -o test  test.c -lg2c

但我得到了错误:

/usr/bin/ld: cannot find -lg2c

如果我使用:

gcc -o test  test.c -L/usr/lib/gcc/x86_64-redhat-linux/3.4.6 -lg2c

然后它工作正常。

所以我添加了这样的路径:

LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH

当我使用$LD_LIBRARY_PATH它时,它会在那里列出,但是:

gcc -o test  test.c -lg2c

仍然不起作用,它给出了同样的错误,我不知道为什么。

我正在使用 CentOS (2.6.32-279.9.1.el6.x86_64),任何帮助将不胜感激。


编辑:编译器版本:

rpm -qa | grep gcc

gcc-4.4.6-4.el6.x86_64
compat-gcc-34-g77-3.4.6-19.el6.x86_64
libgcc-4.4.6-4.el6.x86_64
compat-gcc-34-3.4.6-19.el6.x86_64
gcc-gfortran-4.4.6-4.el6.x86_64
libgcc-4.4.6-4.el6.i686
gcc-c++-4.4.6-4.el6.x86_64

编辑:我尝试使用LIBRARY_PATH,现在我得到一个不同的错误:

gcc: spec failure: unrecognized spec option 'M'

我不知道这意味着什么。

4

3 回答 3

22

尝试设置LIBRARY_PATH,而不是LD_LIBRARY_PATH.

gcc手册页:

图书馆路径

LIBRARY_PATH 的值是一个以冒号分隔的目录列表,很像 PATH。当配置为本地编译器时,如果 GCC 使用 GCC_EXEC_PREFIX 无法找到它们,则 GCC 在搜索特殊链接器文件时会尝试指定的目录。在为 -l 选项搜索普通库时,使用 GCC 进行链接也使用这些目录(但使用 -L 指定的目录首先出现)。

于 2012-11-08T15:43:34.690 回答
2

确保LD_LIBRARY_PATH在修改后导出。否则 GCC 将无法看到修改后的版本。

LD_LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/3.4.6:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
gcc -o test test.c -lg2c
于 2012-11-08T16:01:50.287 回答
0

在您的主目录(不是根目录!)中创建一个新文件夹。-lg2c将与from关联的所有必需库复制/usr/lib/gcc/x86_64-redhat-linux/3.4.6到此文件夹。

将 bash 配置文件中的路径设置为这个新文件夹。

我也遇到了这个问题,并用这个解决方法解决它。也许我们(作为非 root 用户)没有必要的访问/权限/usr/lib/gcc/x86_64-redhat-linux/3.4.6

于 2019-12-18T01:42:26.057 回答