解决静态库之间相互依赖的问题(对‘*‘未定义的引用)

解决两个静态库之间相互依赖的问题

两个静态库之间相互依赖:在静态库liba.a中声明了某些函数,但是实现在libb.a中,此时a库依赖于b库;然后在静态库中libb.a中,某些结构体或者变量在liba.a中声明的,此时b库依赖于a库。

然后链接的时候,会出现两个库之间的相互依赖问题。链接涉及到顺序问题,当先链接a库时,会出现函数未定义的情况,先链接b库是,也一样。
在这里插入图片描述

查了一下,可以交叉链接,比如:gcc -la -lb -la,大概是这样,但是经过我尝试任然不行(最后通过gcc -la -lb -la -lb -la解决,这算什么…)。最后查到一个参数-Xlinker,用这个参数可以解决静态库之间相互依赖的问题。相较于前面一种,如果多个静态库出现依赖问题的话,就不用自己去管这个依赖关系是怎么样的了,非常的方便。

main: gsoap/lib/libgsoap.a  onvif/lib/libonvif.a openssl/lib/libssl.a openssl/lib/libcrypto.a cJSON/lib/libcJSON.a 
	$(CC)  -o $@ -Xlinker "-(" $^ -Xlinker "-)" $(LDLAGS)
  • 1
  • 2

用法:

$ gcc -o test -Xlinker "-(" liba.a libb.a -Xlinker "-)"
  • 1

完美解决。

原文地址:https://www.cnblogs.com/lidabo/p/13808396.html