我正在编译一个程序,并得到一个“ 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/