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

如今我有hello1.cpp和hello2.cpp兩個文件,如今我要生成動態連接庫libhello.so和靜態連接庫libhello.a。如下爲步驟:linux

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位的可執行文件;co

「-L」是須要連接的動態連接庫的目錄路徑; 「-l」參數是須要連接的連接庫名稱(例如庫文件位libname.so,那麼-l後面的參數是name);生成

"-Wl,--rpath="參數爲運行時連接動態連接庫目錄的地址; config

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中

相關文章
相關標籤/搜索