windows下gcc编译opencv和boost

windows gcc编译opencv和boost

gcc安装

官网下载gcc https://sourceforge.net/projects/mingw-w64/files/
安装版本无法下载文件,我使用的是x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z文件在这里插入图片描述
解压软件到设定目录
在这里插入图片描述
D:\mingw64\bin添加到系统环境变量中
打开cmd确认配置是否正确

C:\Users\pt>gcc --version
gcc (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

显示gcc版本后,表示gcc配置成功。

opencv4.5编译

下载opencv源码,采用cmake编译。启动cmake,设置opencv源码路径及编译后生成的代码路径
在这里插入图片描述
点击configure,选择MinGW,点击Finsh
在这里插入图片描述

本电脑关闭了

  • OPENCV_GENERATE_SETUPVARS
  • OPENCV_ENABLE_ATOMIC_LONG_LONG ##不关闭报错,找不到long文件
  • 在这里插入图片描述依次点击configure和generate.(过程确保没有错误日志)

打开cmd命令窗口,到build文件夹下,执行mingw32-make.exe install
在这里插入图片描述
编译完成后,在install目录下生成编译完成的文件.

boost 1.77编译

进入到解压目录下, 编译gcc版本b2

cd D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build>
PS D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build> .\bootstrap.bat gcc
Building the B2 engine..
###
### Using 'gcc' toolset.
###

D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build\src\engine>"g++" -x c++ -std=c++11 -s -O3 -o b2.exe -D_GNU_SOURCE   -DNDEBUG  builtins.cpp class.cpp command.cpp compile.cpp constants.cpp cwd.cpp debug.cpp debugger.cpp execcmd.cpp execnt.cpp execunix.cpp filent.cpp filesys.cpp fileunix.cpp frames.cpp function.cpp glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam.cpp jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp native.cpp object.cpp option.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp jam_strings.cpp startup.cpp subst.cpp sysinfo.cpp timestamp.cpp variable.cpp w32_getreg.cpp modules/order.cpp modules/path.cpp modules/property-set.cpp modules/regex.cpp modules/sequence.cpp modules/set.cpp

D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build\src\engine>dir *.exe
 驱动器 D 中的卷没有标签。
 卷的序列号是 DA63-49AD

 D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build\src\engine 的目录

2022/06/06  23:32           322,560 b2.exe
               1 个文件        322,560 字节
               0 个目录 464,768,651,264 可用字节

D:\ptwork\boost_1_77_0_gcc\boost_1_77_0\tools\build\src\engine>copy /b .\b2.exe .\bjam.exe
已复制         1 个文件。

Building is done. To install, run:

    .\b2 --prefix=DIR install

将b2.exe文件拷贝到boost根目录(D:\ptwork\boost_1_77_0_gcc\boost_1_77_0)下.执行
.\b2.exe --toolset=gcc install --prefix=“d:\boost_gcc”,编译完成后会在d:\boost_gcc生成编译完成的文件.

PS D:\ptwork\boost_1_77_0_gcc\boost_1_77_0> .\b2.exe --toolset=gcc install --prefix="d:\boost_gcc"
Performing configuration checks

    - default address-model    : 64-bit (cached) [1]
    - default architecture     : x86 (cached) [1]
    - compiler supports SSE2   : yes (cached) [2]
    - compiler supports SSE4.1 : yes (cached) [2]
    - has synchronization.lib  : no  (cached) [2]

Windows下使用vcpkg管理第三方库

vcpkg安装

git clone "https://github.com/Microsoft/vcpkg.git"

进入到vcpkg问价夹下,执行bootstrap-vcpkg.bat文件完成安装
vcpkg设置到环境变量中

vcpkg集成

#.\vcpkg.exe integrate install
.\vcpkg integrate project

打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。
在这里插入图片描述
设置vcpk源路径。

安装vcpkg.D.ptwork.git.vcpkg插件
在工程文件上右键选择管理NuGet程序包
在这里插入图片描述
配置完成后,在项目中可以直接使用vcpkg安装的依赖库

win10使用intel编译器编译boost

参考

本机环境

boost使用1.76版本(测试1.78和1.81都可以)。
oneapi使用2023.1版本安装了 Intel® oneAPI Base Toolkit and Intel® oneAPI HPC Toolkit
vs2019

配置

使用Intel®c++ Compiler构建Boost库时,默认情况下B2 将在环境变量PATH中包含的目录路径中搜索可执行文件icl.exe (windows) icpc(Linux)。然后使用icl.exe的路径,B2搜索默认iclvars.bat文件来配置编译器环境(头文件和编译器库的路径)。但是,Intel®oneAPI Toolkits中的bat文件与Intel®Parallel Studio XE (IPSXE)产品中的bat文件在不同的目录中。因此,需要更改B2搜索bat文件的路径。

修改方法

  • 修改 <boost_root>\tools\build\src\tools\intel-win.jam文件
    使用Intel®oneAPI ToolKits中的icl编译器来构建Boost*库时,B2将在C:/Program Files (x86)/Intel/oneAPI/compiler/latest/windows/bin/文件夹中查找iclvars.bat。但是,在Intel®oneAPI工具包中,bat文件位于C:/Program Files (x86)/Intel/oneAPI/compiler/latest/env文件夹下,且bat文件名为vars.bat,而不是iclvars.bat。因此,我们需要更改B2搜索编译器bat文件的路径,并在第207行左右中将“iclvars.bat”更改为“vars.bat”。如下图所示。
 if $(command) || $(root)
    {
        local bin ;
        if $(command)
        {
            bin = [ common.get-absolute-tool-path $(command[-1]) ] ;
            if $(major) >= 2023
            {
                bin = [ path.make $(bin) ] ;
                bin = [ path.parent [ path.parent [ path.parent [ path.parent $(bin) ] ] ] ] ;
                root ?= $(bin) ;
                root = $(root)/latest/env ;
            }
            else if $(bin) && ( $(major) = 2022 || [ numbers.less 2022 $(major) ] )
            {
                bin = [ path.make $(bin) ] ;
                bin = [ path.parent [ path.parent [ path.parent [ path.parent $(bin) ] ] ] ] ;
                root ?= $(bin) ;
                root = $(root)/ ;
            }
            else if $(bin) && ( $(major) = 12 || [ numbers.less 12 $(major) ] )
            {
                bin = [ path.make $(bin) ] ;
                bin = [ path.parent $(bin) ] ;
                root ?= $(bin) ;
                root = $(root)/ ;
            }
        }
    }

    local setup ;
    local setup_astk_bat ;
    local setup_bat ;
    if $(major) >= 2023 
    {
        setup_astk_bat = "vars_*.bat" ;
        setup_bat = "vars.bat" ;
    }
    else if $(major) = 21 || [ numbers.less 21 $(major) ]
    {
        setup_astk_bat = "setvars_*.bat" ;
        setup_bat = "setvars.bat" ;
    }
    else
    {
        setup_astk_bat = "iclvars_*.bat" ;
        setup_bat = "iclvars.bat" ;
    }

    setup = [ path.glob $(root) : $(setup_astk_bat) ] ;
    if ! $(setup)
    {
       setup = [ path.join $(root) $(setup_bat) ] ;
       setup = [ path.native $(setup) ] ;
    }

    local target_types ;
    local iclvars_vs_arg ;
    if $(major) >= 12 || [ numbers.less 12 $(major) ]
    {
        # if we have a known intel toolset check for visual studio compatibility
        # if not trust parameters
        if ! [ is-msvc-supported $(version) : $(msvc-version) ]
        {
            errors.error "msvc $(msvc-version) not supported for intel toolset version $(version)" ;
        }
        if $(.iclvars-version-alias-$(compatibility))
		{
			iclvars_vs_arg = $(.iclvars-version-alias-$(compatibility)) ;
		}
		else
        {
            errors.error "Don't know what parameter to pass for vc version ( $(compatibility) )" ;
        }
        # There are two possible paths for the 64-bit intel compiler,
        # one for the IA32-Intel64 cross compiler, and one for the native
        # 64 bit compiler. We prefer the latter one if it's installed,
        # and don't rely on whether the OS reports whether we're 64 or 32 bit
        # as that really only tells us which subsystem bjam is running in:
        #
        local root_start ;
        if $(major) >= 12
        {
            root_start = [ path.join $(root) "compiler/latest/windows/bin" ] ;
            root_start = [ path.native $(root_start) ] ;
        }
        else if $(major) = 21 || [ numbers.less 21 $(major) ]
        {
            root_start = [ path.join $(root) "compiler/latest/windows/bin" ] ;
            root_start = [ path.native $(root_start) ] ;
        }
        else
        {
            root_start = $(root) ;
        }
        local intel64_path = [ path.join $(root_start) intel64 ] ;
        if [ path.glob $(intel64_path) : icl.exe ]
        {
            target_types = ia32 intel64 ;
        }
        else
        {
            target_types = ia32 ia32_intel64 ;
        }
    }
    else
    {
        target_types = default ;
        iclvars_vs_arg = $(compatibility) ;
    }

root = $(root)/latest/env ;修改使B2能够找到icl
$(major) >= 2023 ;2023是版本情况,根据自己oneApi版本调整

在文档的最后添加

.iclvars-2021.1-supported-vcs = "14.2 14.1" ;
.iclvars-2022.0-supported-vcs = "14.3 14.2 14.1" ;
.iclvars-2023.0-supported-vcs = "14.3 14.2 14.1" ;
.iclvars-2023.0-supported-vcs = "14.3 14.2 14.1" ;

编译安装

Go to Start -> Intel® oneAPI 2021 -> Intel® oneAPI command prompt

  • cd <boost_root>
  • bootstrap.bat
  • build the library you need, for example,
  • b2 install –prefix=<Boost.Build install dir> --without-python --without-graph_parallel --without-mpi toolset=intel-2023.0-vc14.1 link=shared address-model=64 architecture=x86 runtime-link=shared

编译时注意查看是否使用了icl,如果没找到会有log,intel_win.jam中的路径没有设置正确。
使用vs2019会提示找不到boost库文件,使用
set(Boost_COMPILER iw)
find_package(Boost 1.76.0 REQUIRED COMPONENTS filesystem json )

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你想要将OpenCV中的Mat数据通过boost asio传输到浏览器中显示,可以分为以下几个步骤: 1. 将OpenCV中的Mat数据转换为可传输的数据格式,比如JPEG或PNG格式。可以使用OpenCV提供的imencode函数将Mat数据编码为JPEG或PNG格式的数据。 2. 使用boost asio编写服务器端程序,监听特定的端口,等待客户端连接。 3. 当客户端连接成功后,将编码后的图像数据发送到客户端。 4. 客户端接收到数据后,将其解码并显示在浏览器中。 下面是一个简单的实现示例: ```c++ #include <iostream> #include <boost/asio.hpp> #include <opencv2/opencv.hpp> using namespace std; using namespace boost::asio; int main() { io_service service; ip::tcp::acceptor acceptor(service, ip::tcp::endpoint(ip::tcp::v4(), 8080)); cout << "Server started on port 8080" << endl; while (true) { ip::tcp::socket socket(service); acceptor.accept(socket); cv::VideoCapture cap(0); if (!cap.isOpened()) { cerr << "Failed to open camera" << endl; return -1; } cv::Mat frame; vector<uchar> buf; vector<int> params = {cv::IMWRITE_JPEG_QUALITY, 80}; while (true) { cap >> frame; cv::imencode(".jpg", frame, buf, params); boost::system::error_code error; boost::asio::write(socket, boost::asio::buffer(buf), error); if (error) { cerr << "Failed to send data: " << error.message() << endl; break; } } } return 0; } ``` 该示例程序会启动一个服务器,监听端口8080。当有客户端连接成功后,它会从摄像头中获取图像数据,将其编码为JPEG格式的数据,并发送到客户端。客户端可以通过浏览器访问http://localhost:8080来查看实时视频。 注意,该示例程序中没有考虑多线程等并发问题,仅供参考。如果需要实现更复杂的功能,可以参考boost asio文档进行扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值