想同时链接两个自定义的静态链接库,发现无论以什么顺序链接都会有一些函数未定义。网上搜了一番找到解决方案:
假设有liba.a和libb.a两个静态链接库,则添加链接选项时,多链接其中一个库一遍即可解决相互依赖的问题。如-la -lb -la。
为什么相互依赖的静态链接库会导致其中一些库中的函数未定义,因为链接器并没有把库中的所有符号都链接到当前程序中,
而是当前程序中有未定义的符号就到链接库中寻找,按照链接库链接的顺序一个一个找过去。
若链接顺序时-la -lb,则liba.a中有依赖于libb.a中的函数时就会到libb.a中找到函数。如果libb.a中有依赖与liba.a中的函数时
却已经找不到函数定义,所以将liba.a再链接一次到libb.a后面可以解决两个静态库相互依赖的问题了。