現(xiàn)在我有hello1.cpp和hello2.cpp兩個(gè)文件,現(xiàn)在我要生成動(dòng)態(tài)鏈接庫(kù)libhello.so和靜態(tài)鏈接庫(kù)libhello.a。以下為步驟: 1.生成動(dòng)態(tài)鏈接庫(kù): g++ -m32 hello1.cpp hello2.cpp -fPIC -shared -o ../lib/linux32/libhello.so -m32為生成32位的動(dòng)態(tài)鏈接庫(kù),-m64位生成64位的動(dòng)態(tài)鏈接庫(kù)。 2.生成靜態(tài)鏈接庫(kù): 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添加到靜態(tài)鏈接庫(kù) 3.除了生成庫(kù)文件,還可以采用-I參數(shù),引入.o文件。g++ -m32 hello2.cpp -o hello2 -I./ hello1.o4.運(yùn)行時(shí)自動(dòng)加載動(dòng)態(tài)鏈接庫(kù):g++ -m32 hello.cpp -o hello -L/lib/linux32/ -lname -Wl,--rpath=/lib/linux32/其中“-m32”參數(shù)是編譯32位的可執(zhí)行文件;“-L”是需要鏈接的動(dòng)態(tài)鏈接庫(kù)的目錄路徑;“-l”參數(shù)是需要鏈接的鏈接庫(kù)名稱(例如庫(kù)文件位libname.so,那么-l后面的參數(shù)是name);'-Wl,--rpath='參數(shù)為運(yùn)行時(shí)鏈接動(dòng)態(tài)鏈接庫(kù)目錄的地址;5. 運(yùn)行時(shí)自動(dòng)加載靜態(tài)鏈接庫(kù):g++ -m32 hello2.cpp -o hello2 -I/lib/linux32/ lhello -Wl,--rpath=/lib/linux32/6.如果不想在運(yùn)行時(shí)鏈接庫(kù)文件,那么可以采用export方式,例如:export LD_LIBRARY_PATH=/lib/linux32/除了上面兩種方法,還有其他的方法加載庫(kù)文件: 1)在配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑。 打開(kāi)/etc/ld.so.conf 文件并將你存放.h文件的路徑加入。 Ldconfig (是將你修改的配置文件保存導(dǎo)入) 2) /lib 可以將動(dòng)態(tài)庫(kù)放入/lib中 3) /usr/lib 可以將動(dòng)態(tài)庫(kù)放入/usr/lib中 |
|