无论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
等等,再添加

一般不知道要吐血,网上找的也特别不靠谱

https://docs.opencv.org/3.4.3/d3/d52/tutorial_windows_install.html

https://docs.opencv.org/3.4.3/dd/d6e/tutorial_windows_visual_studio_opencv.html

http://answers.opencv.org/questions/scope:all/sort:activity-desc/page:1/query:static build/

https://stackoverflow.com/questions/16830842/using-static-libraries-instead-of-dynamic-libraries-in-opencv

https://stackoverflow.com/questions/27491041/opencv-unresolved-external-symbol

http://answers.opencv.org/question/61345/unable-to-link-static-opencv/

https://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix

https://stackoverflow.com/questions/13472294/opencv-243-using-static-libs-error-lnk2019

都是一知半解,

最终,我想到了用opencv sample , dlib example

1.cmake构建静态库,

2.设置编译选项

3.编译

之后,可以看到test,demo,sample ,example 的工程依赖, 所以静态库的那些依赖就可以找到了!!!!!!!!!!!!!!!!!

-windows:

测试通过OK

-linux:

todo



参考

https://stackoverflow.com/questions/27361314/why-the-opencvs-library-on-linux-is-libopencv-core-pch-dephelp-a-but-libopencv

****_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 \

cmake opencv,dlib 编译静态库 1的更多相关文章

  1. android ndk-build 编译静态库libxx.a 以及Android studio openssl 静态库配置(cmake)

    android ndk-build 编译静态库libxx.a 需求场景: 目前有安卓编码好的现在的openssl的两个.a,我们需要调用openssl的函数,并把功能再封装成.a; 这样使用时,在an ...

  2. opencv编译静态库时选择MD模式无效的原因

    在Cmake-gui上看到的明明是MD运行库依赖,生成MS项目时却变成了MT运行库依赖. 原因在于编译静态库时内部做了自动替换.

  3. 编译静态库的方式使用spdlog和fmt

    前言 spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式. 又因为spdlog还依赖另一个开源库fm ...

  4. 【iOS】编译静态库

    与java和.net一样,objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图s ...

  5. 关于使用Visual编译静态库动态库及其使用的问题

    本文主要讲述了如何使用Visual Studio 2013 编译静态库和动态库,并使用. 一.静态库 1.  编写静态库 若要创建将引用并使用刚创建的静态库的应用程序,请从“文件”菜单中选择“新建”, ...

  6. 【转】TI DSP C6657学习之——编译静态库.lib

    熟悉C++开发的的小伙伴都知道,我们一般代码中往往要引入许多第三方编译好的库,有些是静态链接库static library, 有些是动态链接库dll.引入库的目的一是减少代码的编译时间,二是只提供函数 ...

  7. Makefile 编译静态库文件及链接静态库

    本文为原创文章,转载需指明该文链接 1.代码目录结构如下: comm/ comm/inc/apue.h  3 atexit.c Makefile  5 staticlib/lib/ staticlib ...

  8. Xcode 之自己编译静态库

    今天介绍下,如何利用Xcode,新建一个静态库,以及如何编译成i386.armv7.armv7s 等平台架构. 开发环境:MAC OS X 10.9.4 + Xcode 5.0.2 背景知识:库分两种 ...

  9. windows openssl-1.1.1 编译静态库和动态库

    一下为windows上安装过程 1.下载 openssl-1.1.0.tar.gz 2.安装 ActivePerl, 可以到http://www.activestate.com/activeperl/ ...

随机推荐

  1. TextView属性

    TextView及其子类,当字符内容太长显示不下时可以省略号代替未显示的字符:省略号可以在显示区域的起始,中间,结束位置,或者以跑马灯的方式显示文字(textview的状态为被选中). 其实现只需在x ...

  2. PHP环境变量归纳(转自网络)

    PHP环境变量主要有$GLOBALS[].$_SERVER[].$_GET[].$_POST[].$_COOKIE[].$_FILES[].$_ENV[].$_REQUEST[].$_SESSION[ ...

  3. 使用 Python 为 KVM 编写脚本,第 1 部分: libvirt

    虚拟化是目前市场上大多数服务器操作系统的标准设备.在 Linux® 的世界里,服务器虚拟化有两个主要选择:基于 Kernel 的虚拟机 (KVM) 和 Xen.KVM 是 Red Hat 和其他公司采 ...

  4. LeetCode:二叉树相关应用

    LeetCode:二叉树相关应用 基础知识 617.归并两个二叉树 题目 Given two binary trees and imagine that when you put one of the ...

  5. DevExpress实用心得:XtraGridControl动态添加右键菜

    在使用GridControl的时候经常需要添加右键菜单. 一般的做法是自己创建菜单项,然后注册GridView的Mouse-Click事件,然后Show出定义好的菜单. 但是涉及到一些单击事件会收到编 ...

  6. python中reduce()函数

    reduce()函数也是Python内置的一个高阶函数.reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收 ...

  7. 【JavaScript学习整理】js基础

    HTML,CSS属于标记语言, JavaScript是基于客户端的脚本语言. 变量: 语法  var 变量名 = value var是系统内部关键字,用来声明变量 变量名规则:  1.不能以数字开头  ...

  8. 为UniDBEdit添加拖拽属性

    不知是作者Fashard的疏忽还是有意,UniDBEdit的拖拽属性居然没有发布出来(其他组件都已发布).加上其实也很简单. 打开source目录下的uniDBEdit.pas单元,在TUniDBEd ...

  9. LINQ 学习路程 -- 查询操作 Select, SelectMany

    IList<Student> studentList = new List<Student>() { , StudentName = "John" }, , ...

  10. 算法(Algorithms)第4版 练习 2.2.26

    在sort函数创建aux数组: package com.qiusongde; import edu.princeton.cs.algs4.In; import edu.princeton.cs.alg ...