gcc g 生成 使用動態庫 靜態庫

2021-10-24 15:34:17 字數 865 閱讀 3349

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。那麼什麼是靜態庫呢?在我們的專案開發中,有些 會被反覆使用,那麼這時我們便可將這些 編譯成庫的形式來呼叫,像靜態庫就是在可執行檔案中包含庫 的乙份完整拷貝,但這種方式有個很嚴重的...