step4 . day4 库函数和库函数的制作
函數庫: 具有特定功能的函數,系統或者第三方提供的編譯好的二進制文件(如數學庫、線程庫等),分為靜態庫和動態庫。
靜態庫:代碼運行時候,將靜態庫代碼復制進文件(用到哪些復制哪些),移植性好,但是代碼體積大,升級庫后需要重新編譯源文件
生成靜態庫的步驟:
1)寫庫文件源碼? 即和之前頭文件實現的.c文件類似(通常函數庫也有頭文件)
2)把源碼編譯為目標文件(*.o)? ? ? ? ?gcc -c xxxx.c xxx.c
3) 用ar命令把目標文件生成lib文件? ? ?ar crs libxxx.a xxx.o xxx.o ...
4)寫調庫函數的主程序。
5)把生成的lib文件和主程序一起編譯鏈接
gcc -o 目標文件名 -L庫路徑 -lxxx
gcc -o 目標文件名 -static -L庫路徑 -lxxx
?
動態庫:不復制代碼到源代碼,在程序運行時候同事加載庫至內存,動態庫可以被多個程序調用,動態庫升級方便,但程序運行依賴庫的加載
生成動態庫的步驟:
1)寫庫文件源碼,同上
2)把源碼編譯為目標文件(*.o)? ? ?gcc -c -fPIC xxxx.c xxx.c? (路徑無關文件)
3)生成動態鏈接庫文件? ? ? ? ? ? ? ? ??gcc -shared -o libxxx.so xxx.o
4)寫調庫函數的主程序。
5)把生成的lib文件和主程序一起編譯鏈接
gcc -o 目標文件名 -L庫路徑 -lxxx
6) 生成的庫文件執行文件在執行的時候找不到庫文件,
下面三種方法可選,
1 把動態庫添加到系統的庫文件目錄中? ? ? ? ? ? ? ? ? ? ? ? ?//需要權限,不建議使用
2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的動態庫路徑? ?//推薦
3 添加/etc/ld.so.conf.d/*.conf文件,執行ldconfig刷新? ?//需要權限,不建議使用
轉載于:https://www.cnblogs.com/huiji12321/p/11305779.html
總結
以上是生活随笔為你收集整理的step4 . day4 库函数和库函数的制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: step4 . day3 目录访问函数
- 下一篇: C++-运行时类型信息,异常(day11