日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态库和静态库的创建

發布時間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态库和静态库的创建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
庫:一組別人實現好的函數接口
1.命名方法?
靜態庫 : libname.a? 動態庫 : libname.so?
注意 ? :庫的名字是name?
2.鏈接動態庫和靜態庫的區別?
預處理,編譯,匯編,鏈接(連接庫)
(1)鏈接靜態庫? 如果鏈接的是靜態庫,編譯器將程序中調用的庫中函數接口的實現代碼鏈接到可執行 文件中,生成可執行文件體積大.程序運行的時候,不需要庫支持。?
(2)鏈接動態庫? 如果鏈接的是動態庫,編譯器將程序中調用的函數所在的庫的名字記錄在可執行文件中 ,生成可執行文件體積小.程序運行的時候,需要[OS]加載動態庫。

3.制作靜態庫
(1)將.c文件編譯成.o文件 ? gcc -c file.c -o file.o? ....?
(2)將.o文件打包成靜態庫? ar -cr libname.a ?*.o?

4.gcc 鏈接庫的參數?
注意:gcc 默認到/usr/lib 和/lib鏈接庫,gcc只能識別它自帶的庫,第三方庫[不是編譯器自帶庫]無法識別?
-L ?告訴編譯器庫的路徑? -l ?告訴編譯器庫的名字?
例如: gcc main.c -L 庫的路徑 -l庫的名字
5.制作動態庫?
(1)將.c文件編譯成.o文件 ? gcc -c file.c -o file.o? ....?
(2)將.o文件打包成動態庫? gcc -shared *.o -o libname.so?
--------------------------------------------------- 查看可執行文件所依賴的動態庫: readelf -a ?可執行文件名 | grep "Shared" ----------------------------------------------------
6. OS 加載庫的時候,默認的搜索路徑?
(1)環境變量LD_LIBRARY_PATH所包含的路徑?
添加環境變量: export ?環境變量名=$環境變量名:新的路徑
注意: 直接通過export命令,是臨時添加,如果永久有效,將命令寫道配置文件 <1>用戶主目錄下的.bashrc文件 [當前登錄的用戶打開終端的時候會執行一次] <2>/etc/bash.bashrc ? ? ? ? ?[所有的用戶打開終端的時候都會執行一次]
例如: export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/linux/mylib

(2)/usr/lib 和 /lib?
7.當靜態庫和動態庫同時存在,編譯器默認鏈接的是動態庫 。? 如果想強制鏈接靜態庫,需要加上 -static 參數 ?
8.給庫加上版本號?
libtest.so.0.1 , libtest.so.0.2?
讓編譯器鏈接庫成功,必須創建創建一個軟鏈接?
ln -s libtest.so.0.2 ?libtest.so

總結

以上是生活随笔為你收集整理的动态库和静态库的创建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。