kod*_*r16 3 c linker gcc static-linking
我libvec.a从 simpleaddv.o和multo.o. 目标文件addv.o包含 1 个函数符号 ( addvec) 并multo.o包含 1 个函数 ( multvec)。我还编写了一个简单的程序来测试它(driver.c它添加了 2 个向量并使用addvec了库中的函数;它还包含vector.h了定义函数原型的程序)。然后我编译它
gcc -static driver.o ./libvec.a
Run Code Online (Sandbox Code Playgroud)
一切顺利。但起初我试图用
gcc -static ./libvec.a driver.o
Run Code Online (Sandbox Code Playgroud)
我得到了一个错误:
undefined reference to 'addvec'
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我首先指定库时会出错?订购应该重要吗?
始终在库之前链接目标文件,句号。
麻烦的是链接器扫描库,它正在寻找main(). 它没有找到它,所以它不会从库中取出任何东西。然后它会扫描driver.o,找到正在寻找的东西,而不是里面的东西libvec.a(它已经忘记了,因为它们不相关)。因此,来自的函数libvec.a是未满足的引用——并且链接失败。
请注意,“库之前的目标文件”在与静态库或共享库链接时起作用。