使用gcc时找不到库错误

标签 c

我正在尝试编译示例 C 程序并将其链接到一些静态库文件:

gcc -I /usr/local/include -L /usr/local/lib -l libsundials_cvode.a -l libsundials_nvecserial.a cvRoberts_dns.c -o cvRoberts_dns.o

(我确信上面的库文件和包含文件目录是正确的。)

我得到的错误是:

/usr/bin/ld: cannot find -llibsundials_cvode.a
collect2: ld returned 1 exit status

我有两个问题:

1) 是否正确使用了 -L 和 -l 选项?

2) 上面的错误是b/c gcc在错误的位置寻找库文件,对吧?我尝试通过终端将 $LD_LOAD_PATH 设置为 /usr/local/bin 来解决此问题。我仍然收到上述错误。我该如何解决这个问题?

谢谢!

-洛汗。

最佳答案

尝试使用 -lsundials_cvode - 删除“lib”和“.a”部分

请注意,LD_LOAD_PATH 用于在运行时而不是编译期间定位动态库。

编辑:

I just tried that. The change addresses the cannot find library error but 
now I am faced with many "undefined reference to" errors. Does this mean 
the linking of the library files has failed somehow? How do I correct this? 

这意味着还有其他需要解析的符号不在您链接的库中。请注意,您需要更改这两个库(命令行上有两个库)。也可能它们的顺序是错误的。

关于使用gcc时找不到库错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483669/

相关文章:

c - 唯一标识套接字

c - 程序在执行期间改变变量值

c - bool 比较的效率?在 C 中

c - 找不到 glib.h 和 gtk.h

输入大数字时命令终止

arrays - 数组如何存储在堆栈中?

c - 我如何制作自己的 fgetc() 函数?

c - 如何在 C 中使用 rand() 函数和范围

c - 将当前区域设置编码中的一个宽字符从 stdin 回显到 stdout

c - x86 程序集从 32 位寄存器中获取一个字节