两个静态库之间相互依赖:在静态库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)
用法:
$ gcc -o test -Xlinker "-(" liba.a libb.a -Xlinker "-)"
完美解决。
原文:https://www.cnblogs.com/lidabo/p/13808396.html