g++ 編譯動態連結庫和靜態連結庫
現在我有hello1.cpp和hello2.cpp兩個檔案,現在我要生成動態連結庫libhello.so和靜態連結庫libhello.a。以下為步驟:
1.生成動態連結庫:
g++ -m32 hello1.cpp hello2.cpp -fPIC -shared -o ../lib/linux32/libhello.so
-m32為生成32位的動態連結庫,-m64位生成64位的動態連結庫。
2.生成靜態連結庫:
g++ -m32 hello1.cpp -c -o hello1.o //編譯hello1.cpp 生成中間檔案hello1.o
g++ -m32 hello2.cpp -c -o hello2.o //編譯hello2.cpp 生成中間檔案hello2.o
ar rcs libhello.a hello2.o hello1.o //將hello1.o和hello2.o新增到靜態連結庫
3.除了生成庫檔案,還可以採用-I引數,引入.o檔案。 g++ -m32 hello2.cpp -o hello2 -I./ hello1.o 4.執行時自動載入動態連結庫: g++ -m32 hello.cpp -o hello -L/lib/linux32/ -lname -Wl,--rpath=/lib/linux32/ 其中“-m32”引數是編譯32位的可執行檔案;“-L”是需要連結的動態連結庫的目錄路徑;“-l”引數是需要連結的連結庫名稱(例如庫檔案位libname.so,那麼-l後面的引數是name);"-Wl,--rpath="引數為執行時連結動態連結庫目錄的地址; 5. 執行時自動載入靜態連結庫: g++ -m32 hello2.cpp -o hello2 -I/lib/linux32/ lhello -Wl,--rpath=/lib/linux32/ 6.如果不想在執行時連結庫檔案,那麼可以採用export方式,例如: export LD_LIBRARY_PATH=/lib/linux32/ 除了上面兩種方法,還有其他的方法載入庫檔案: 1)在配置檔案/etc/ld.so.conf中指定的動態庫搜尋路徑。 開啟/etc/ld.so.conf 檔案並將你存放.h檔案的路徑加入。 Ldconfig (是將你修改的配置檔案儲存匯入) 2) /lib 可以將動態庫放入/lib中 3) /usr/lib 可以將動態庫放入/usr/lib中