c - 为什么有时需要为 C 链接列出两次库,这是可以避免的吗?

标签 c linker ld

我正在编译一个程序,并得到一个“ undefined reference ”,指向一个在 lib1 的 C 文件中定义的常量变量,该文件在 lib2 中使用。如果我编译为:

clang myfile.c -L. -L../lib2dir -llib1 -llib2 

我记得在 Unix 时代,有时您必须再次添加一个库。所以我做了:

clang myfile.c -L. -L../lib2dir -llib1 -llib2 -llib1

它链接了。为什么这仍然是必要的,或者我做错了什么而不应该是必要的?

最佳答案

这些库按照它们在命令行中的放置顺序进行链接。链接库时,只会从中解析缺少的符号。由于您提到的符号在 lib2 中,因此它不会从 lib1 中解析,因为链接器还不知道以后会需要它。因此,将 -llib2 放在 -llib1 之前。

关于c - 为什么有时需要为 C 链接列出两次库,这是可以避免的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42406027/

相关文章:

c++ - 尝试编译使用共享库的 C++ 程序时出错

c - 调用 ld-2.13.so 中的 _dl_open

c++ - mysqlpp 中的引用错误

c - 展开支持的内存利用率(在 ARM 架构上)

c - 函数指针 - 自动取消引用

c - 使用 scanf ("%i",var) 时,如果用户输入字母或仅按 Enter 键,我会遇到问题

c++ - 错误 LNK2038 : mismatch detected for '_ITERATOR_DEBUG_LEVEL' : value '0' doesn't match value '2' in main. 对象

c++ - 外部链接会增加链接/构建时间吗?

c - 无法打印二叉搜索树

c - 如果语句被跳过