首先先簡介下linux系統下程序的庫函數分為三種類型;
1.靜態函數庫:在程序執行前加入到目標程序中;
2.共享函數庫:在程序啟動的時候加載到程序中,被不同程序共享;
3.動態函數庫:在程序運行的任何時候動態的加載
linux 下的.o文件是目標文件相當於windows的obj文件;
.so文件是共享庫相當於windows的shared object;
.a文件是靜態庫由好多個.o文件合在一起,用於靜態鏈接;
.la為libtool自動生成的一些共享庫;
如何生成所需要的.a與.so文件的具體過程:
為了防止報錯統一采用g++而不用gcc;g++是C++編譯器,而gcc是c編譯器大部分情況下沒有區分,但是在調用opencv會有區別;
第一步:調用已經編寫好的XX.cpp生成.so文件;
g++ 空格 XX.cpp 空格-L./lib 空格 -lopencv_core 空格-lopencv_highgui空格-lopencv_imgproc空格-fPIC空格-shared空格-o空格libcp.so 生成可以用的so文件
第二步:通過調用生成的.so文件
g++ 空格 -o 空格 test 空格 test.cpp 空格 -L. 空格 -lcp 空格 -lopencv_core 空格 -lopencv_highgui 空格 -lopencv_imgproc; 生成可以調用的test文件。
第三步:生成的.s0文件提示找不到文件,說明你的環境變量沒有配置好;
export 空格 LD_LIBRARY_PATH=/home/zx/cp_location_160708/:$LD_LIBRARY_PATH;
通過調用opencv庫生成.a文件
第一步:通過編譯文件生成.o文件
g++ 空格 -c hello.c 生成hello.o文件;
第二步:通過生成的.o文件變成.a文件
ar cr liblocation_cp.a hello.o 調用hello.o生成
第三步調用生成的.a文件生成運行文件
g++空格-o空格XX 空格XX.cpp 空格 /home/zx/cp_location_160708/libcp.a 空格 `Pkg-config 空格 --libs 空格 --cflags 空格 opencv`