gcc -shared my.c -o libmy.so有時候會報錯提示加上
-fpic
(-flag position-independent code,為了生成位置無關**,用全域性偏移的方式,乙份動態庫即可給多份主程式使用,細節自己網上查吧),加上就行了。
libmy.so
檔案注意lib字首和.so字尾。動態庫命名格式是規定好的,細節自己網上查。
gcc main.c -l. -lmy【
-l
】編譯時動態庫所在的目錄。.
代表當前目錄
【-l
】讀音是[矮歐],不是[矮]。意思是指定動態庫名字。這裡動態庫名字是libmy.so
,所以使用-lmy
。
使用動態庫還需要設定動態庫路徑:動態庫路徑的設定方法。
gcc -c static.c -o static.o【ar r libstatic.a static.o
-c
】表示只編譯出.o二進位制檔案,不進行鏈結
libstatic.a
同樣要注意命名格式。
【ar
】(archive)將.o檔案都打包存到.a靜態庫中。引數r
(replacement)表示將.o檔案覆蓋新增到靜態庫中。
gcc main.c -l. -lstatic && ./a.out用法同動態庫類似,由於是靜態庫,二進位制庫檔案已經編譯到了.out檔案中,所以不需要指定run_path。
gcc g 靜態動態庫 混鏈結
我的環境 centos6 x64.gcc4.4.7 在使用gcc g 編譯程式時我們希望指向一些庫是使用靜態的鏈結方式.另外的一些是動態的方式.我以boost 為例.如果我們要使用靜態庫則是這樣的 g main.cpp lpthread usr lib64 libboost thread.a usr...
gcc g 靜態動態庫 混鏈結
我的環境 centos6 x64.gcc4.4.7 在使用gcc g 編譯程式時我們希望指向一些庫是使用靜態的鏈結方式.另外的一些是動態的方式.我以boost 為例.如果我們要使用靜態庫則是這樣的 g main.cpp lpthread usr lib64 libboost thread.a usr...
Linux C C 生成並使用靜態庫 動態庫
在windows下靜態庫的字尾為 lib 動態庫字尾為 dll 而在linux下靜態庫的字尾為 a 動態庫的字尾為 so。那麼什麼是靜態庫呢?在我們的專案開發中,有些 會被反覆使用,那麼這時我們便可將這些 編譯成庫的形式來呼叫,像靜態庫就是在可執行檔案中包含庫 的乙份完整拷貝,但這種方式有個很嚴重的...