【发布时间】:2011-01-14 15:46:31
【问题描述】:
我正在为一个班级评分 C 和 C++ 文件,这个作业使用 GSL 库。由于我的计算机没有 root 权限,我的 GSL 库安装在我的主目录中,因此我需要告诉编译器和链接器在哪里可以找到它。
当我自己编写程序时,这不是问题,因为我只是在 gcc 中添加了适当的 -L 和 -I 标志。
但是当我编译学生的文件时,我不想编辑他们的每一个 makefile。相反,我想将适当的目录放入环境变量中,以便无缝地发生。
为此,我已将以下变量与库一起导出或包含位置: C_INCLUDE_PATH、CPLUS_INCLUDE_PATH、LIBRARY_PATH 和 LD_LIBRARY_PATH
但是当我编译一个学生的项目时,用
gcc -Wall -o MC_thread MC_thread.c -lgsl -lgslcblas -lpthread -lm
我收到以下错误:
/usr/bin/ld: cannot find -lgsl
collect2: ld returned 1 exit status
make: *** [all] Error 1
我正在使用 gcc v 4.1.2。如果我使用 gcc v 4.4,我实际上没有收到错误,但我不知道为什么。我的链接器是:
ld -V
GNU ld version 2.17.50.0.6-12.el5 20061020.
【问题讨论】:
-
为他们使用的环境变量尝试 man ld 和 man ld.so。 LD_LIBRARY_PATH 可能会起作用。
-
我认为 LD_LIBRARY_PATH 仅由 ld.so 使用,而不是由 ld 使用。由于这是一个编译时错误,而不是运行时错误,我将重点介绍为什么 LIBRARY_PATH 不起作用。我要验证两件事,库文件是否具有正确的名称以及 LIBRARY_PATH 是否实际上是在 gcc 执行环境中定义的?
-
尝试使用 '-v' 选项运行 gcc 并从输出中发布完整的 ld 调用。
标签: c path shared-libraries ld