1. 程式人生 > >g++ 編譯動態鏈接庫和靜態鏈接庫

g++ 編譯動態鏈接庫和靜態鏈接庫

dconf lin ldconfig 不想 名稱 如果 保存 path -fpic

現在我有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中

g++ 編譯動態鏈接庫和靜態鏈接庫