Linux ar打包靜態庫 plugin needed to handle lto object 問題


環境:CentOS 7 x64

有編譯后的 .o 文件如下(uSockets):

 

 一開始使用如下命令打包:

[root@jxh obj]# ar r -o libsockets.a *.o
ar: 正在創建 libsockets.a
ar: context.o: plugin needed to handle lto object
ar: epoll_kqueue.o: plugin needed to handle lto object
ar: gcd.o: plugin needed to handle lto object
ar: libuv.o: plugin needed to handle lto object
ar: loop.o: plugin needed to handle lto object
ar: socket.o: plugin needed to handle lto object
ar: ssl.o: plugin needed to handle lto object

也生成了靜態庫,使用 ar t libusockets.a 查看貌似一切正常(習慣性的忽略了不是error的錯誤)

然后鏈接時總是不成功,報相關函數未定義。

gcc echo_server.c -I./include -L. -lusockets -o server

然后直接使用 .o 文件卻是可以的

gcc echo_server.c usockets/*.o -I./include -o server

說明打包的靜態庫有問題,於是搜了一下 plugin needed to handle lto object 這個錯誤,發現是ar的問題,改為使用gcc-ar就可以了,於是重新打包:

[root@jxh obj]# gcc-ar r libusockets.a *.o
/usr/bin/ar: 正在創建 libusockets.a
[root@jxh obj]# 

然后再次鏈接調用,一切正常。

參考文章:

linux下 GCC編譯鏈接靜態庫&動態庫(靜態庫和動態庫詳細教程)

使用GCC鏈接時優化和靜態鏈接庫(從這里找到的解決方案)


免責聲明!

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



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