为什么有时需要为 C link 列出两次库,这是可以避免的吗?
Why do you need to sometimes list a library twice for C link and is it avoidable?
我正在编译一个程序,并得到一个 "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
前面。
我正在编译一个程序,并得到一个 "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
前面。