解決兩個靜態庫之間相互依賴的問題
兩個靜態庫之間相互依賴:在靜態庫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
完美解決。