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

时间:2017-02-23 02:37:54

标签: c linker ld

我正在编译一个程序,并且正在获取lib2中使用的lib1中C文件中定义的常量变量的“未定义引用”。如果我编译为:

,我会收到错误
clang myfile.c -L. -L../lib2dir -llib1 -llib2 

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

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

和它相关联。为什么这仍然是必要的,或者我做错了什么,它不应该是必要的?

1 个答案:

答案 0 :(得分:2)

库按照它们在命令行中的放置顺序进行链接。链接库时,只会从中解析缺失的符号。由于您提到的符号位于- name: restart mysql service: "name={{ mysql_daemon }} state=restarted" register: mysql_service - name: pause after mysql restart pause: "seconds=5" when: mysql_service.changed 中,因此不会从lib2解析,因为链接器尚不知道稍后将需要它。因此,将lib1放在-llib2前面。