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 )