无论windows,linux 所有的库 ,dlib,opencv 通过cmake-gui 设置好静态库, 动态库,和其他各个选项
###Tips: cmake 优先级用cmake-gui,因为命令太多,容易敲错!!!!!
cmake 默认是制作动态库.so,
若需要制作静态库
#1.BUILD_SHARED_LIBS 设置为OFF
cmake-gui 选择:
BUILD
=> BUILD_SHARED_LIBS 默认是勾选就是动态库(.dll/.so);不勾选就是静态库 (.lib/ .a),
还可以选择指令集,SSE2 ,SSE3 SSE4.1 SSE4.2 avx ,avx2 AVX512 ,NEON等
命令:
cmake -DBUILD_SHARED_LIBS=OFF ..
这里唠叨下,你生成的静态库,可以被静态库包装, 给EXE使用。
1.但是一定要确保都是静态库, 2.而且 【运行环境】也都是一样的, MT ,MD,区别是链接系统的库不一样。
静态库 可以选择MD,MT 其中的一种来链接系统库,但必须要统一!!!
需要注意的是构建 静态库 其中除了又很多IPP,JPEG,PNG, FFMPEG,等等等等,还有很多系统的依赖,
windows:
..\..\lib\Release\opencv_ts343.lib
..\..\lib\Release\opencv_world343.lib
..\..\3rdparty\lib\Release\ippiw.lib
..\..\3rdparty\ippicv\ippicv_win\lib\intel64\ippicvmt.lib
..\..\3rdparty\lib\Release\libprotobuf.lib
..\..\3rdparty\lib\Release\libjpeg-turbo.lib
..\..\3rdparty\lib\Release\libwebp.lib
..\..\3rdparty\lib\Release\libpng.lib
..\..\3rdparty\lib\Release\libtiff.lib
..\..\3rdparty\lib\Release\libjasper.lib
..\..\3rdparty\lib\Release\IlmImf.lib
..\..\3rdparty\lib\Release\zlib.lib
vfw32.lib
comctl32.lib
gdi32.lib
ole32.lib
setupapi.lib
ws2_32.lib
..\..\3rdparty\lib\Release\ittnotify.lib
kernel32.lib
user32.lib
winspool.lib
shell32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
linux:
qt
等等,再添加
一般不知道要吐血,网上找的也特别不靠谱
都是一知半解,
最终,我想到了用opencv sample , dlib example
1.cmake构建静态库, 2.设置编译选项 3.编译 之后,可以看到test,demo,sample ,example 的工程依赖, 所以静态库的那些依赖就可以找到了!!!!!!!!!!!!!!!!!
-windows: 测试通过OK
-linux: todo
****_pch-dephelp.a是预编译头,不是静态库
cd opencv
mkdir build
cd build
cmake -DUSE_AVX_INSTRUCTIONS=1 -DUSE_AVX2_INSTRUCTIONS=1 -DBUILD_SHARED_LIBS=OFF ..
cmake --build . --config Release
有的说必须要以下这些东西?
cmake ../ -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=/opencv1 -DWITH_TBB=1 -DWITH_PNG=1 -DWITH_TIFF=1 -DWITH_JPEG=1 -DWITH_JASPER=1 -DBUILD_SHARED_LIBS=0
-llibjasper -llibjpeg
-llibpng
-lIlmImf
-llibtiff
-ldl
-lz \