解決靜態庫之間相互依賴的問題(對‘*‘未定義的引用)


解決兩個靜態庫之間相互依賴的問題

兩個靜態庫之間相互依賴:在靜態庫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

完美解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM