VS2019配置Boost-v1.72.0库

买了本《Boost 程序完全开发指南》才发现,里面的开发环境是Linux。。。尴尬

1.环境说明

本文使用的VS版本是Visual Studio Professional 2019,配置的boost库版本为Boost-v1.72.0,Windows10。

2.配置过程

2.1 下载Boost库

PS:Boost 源代码所在路径最好全英文,不要有空格、特殊字符、中文等。

Boost库官网:https://www.boost.org/

Boost-v1.72.0库源码包下载(选择第一个)https://boostorg.jfrog.io/artifactory/main/release/1.72.0/source/

(网上说低于1.7.0的版本可能在vs2019中支持不完善,编译或运行时发生不可预料的bug)

在这里插入图片描述
其他版本的boost源码包:https://www.boost.org/users/history/

下载好Boost源码包后,解压,得到文件目录如下图,找到其中的bootstrap.bat文件:
在这里插入图片描述

2.2 使用VS编译Boost库

打开VS的命令行窗口:

在开始菜单的VS菜单项里打开“Developer Command Prompt for VS2019”,进入boost目录:
在这里插入图片描述
命令行窗口执行bootstrap.bat
在这里插入图片描述
命令行运行bootstrap.bat后,会在根目录下生产b2.exe,b2.exe(bjam.exe是老版本,b2是bjam的升级版本),project-config.jambootstrap.log这几个文件:
在这里插入图片描述
继续在命令行窗口使用b2编译所需的boost库:

查看VS版本(即编译器版本)
打开任意VS工程:
在这里插入图片描述

PS:Boost库有个缺点就是过于庞大,使用者可以选择完成安装或者定制安装,可以选择哪些部分需要或不需要。但我刚开始接触Boost库,选择的是完成安装,所以编译的时间长一些。
以下也是安装的x64和x86的脚本代码。
(第3章 b2(bjam编译参数说明)中会详述编译的相关参数,大家根据自己的需求选择性编译)

依次生成x64和x86的脚本代码:

b2.exe install --prefix="D:\Boost\x64" --build-type=complete --toolset=msvc-14.2 threading=multi --build-type=complete address-model=64
b2.exe install --prefix="D:\Boost\x86" --build-type=complete --toolset=msvc-14.2 threading=multi --build-type=complete address-model=32

编译完成之后去目标路径下查看:
在这里插入图片描述
在这里插入图片描述

3.b2(bjam编译参数说明)

  • stage/install:stage表示只生成库,install还会生成包含头文件的include目录,但编译时间较长;默认是stage。

–stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。

b2 install --toolset=msvc-14.2 --without-python --prefix="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
  • –build-type:complete 编译所有boost库;默认complete。
b2 stage --toolset=msvc-14.2 --build-type=complete --stagedir="E:\Learning\Boost" link=static runtime-link=shared threading=multi address-model=64
  • –without/with:选择不编译/编译哪些库。默认是全部编译。

查看boost包含库的命令是bjam --show-libraries

//boost::python lib
b2 stage --toolset=msvc-14.2  --with-python --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64
  • –toolset:指定编译器,可选的如borland、gcc、msvc-14.2(VS2019)等。

  • link:生成动态链接库/静态链接库。
    static只会生成lib文件。
    shared会生成lib文件和dll文件。

b2 stage --toolset=msvc-14.2 --build-type=complete --stagedir="E:\Learning\Boost" link=shared runtime-link=shared threading=multi address-model=64
  • runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方式。

  • threading:单/多线程编译。现在基本都是multi方式(多线程)了。

  • address-model:64位平台还是32位平台,不填就两种平台的库都会编译。

  • debug/release:debug版本,release版本,不填就两种版本的库都会编译。

b2 stage --toolset=msvc-14.2  --with-atomic --stagedir="E:\Learning\Boost" link=static threading=multi address-model=64 debug

4.Boost库的命名特点

在这里插入图片描述
开头_库名称-编译器版本-[多线程]-[static版本][debug版本]-平台-版本号

  • 开头:以“lib”开头的是“link=static”版本(静态链接库版本,没有dll),而直接以“boost”开头的是“link=shared”版本(动态链接库版本,包含lib和dll)。
  • 库名称:其后的是boost库名称(比如date_time库)。
  • 编译器的版本:与库名称之间以"-“而不是下划线”_"分隔(比如 -vc140)。
  • [多线程]:有“mt”的为“threading=multi”版本,没有该项则是“threading=single”版本。
  • [static版本]:有“s”的为“runtime-link=static”版本,没有该项则是“runtime-link=shared”版本。
  • [debug版本]:有“gd”的为debug版本,没有的则是release版本。
  • 平台:x64或x32
  • 版本号:所有的库都含有boost库的版本号结尾

5.测试案例:VS工程的使用配置

打开VS2019新建一个工程
打开项目属性 -> VC++目录 -> 修改包含目录库目录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

示例:

#include <boost/version.hpp>
#include <boost/config.hpp>
#include <iostream>
using namespace std;

int main()
{
	cout << BOOST_VERSION << endl;     //Boost版本号
	cout << BOOST_LIB_VERSION << endl; //Boost版本号
	cout << BOOST_PLATFORM << endl;    //操作系统
	cout << BOOST_COMPILER << endl;    //编译器
	cout << BOOST_STDLIB << endl;      //标准库
}

参考博客:
https://blog.youkuaiyun.com/youyicc/article/details/95959781
https://blog.youkuaiyun.com/jhsword/article/details/95061632
https://www.bilibili.com/video/BV1JE411A7sM?spm_id_from=333.999.0.0
https://www.cnblogs.com/lidabo/p/3782193.html

<think>好的,用户遇到了XRT相关的错误,包括多线程启用失败和缓冲区分配错误,特别是在使用Vitis教程中的u200 hw_emu时。需要一步步分析可能的原因和解决方案。 首先,用户提到多线程操作不被允许。这可能与XRT的配置或权限有关。需要检查XRT的安装是否正确,特别是用户自己编译的ZCU106平台。根据引用[2],ZCU106不在官方支持的列表中,可能需要特别注意编译步骤是否正确,环境变量是否设置正确。 然后是缓冲区分配错误,显示未知的内存索引。这可能与平台设置或XCLBIN文件有关。需要确认XCLBIN是否针对正确的平台编译,内存连接是否正确定义。另外,硬件仿真(hw_emu)可能有特殊的内存要求,需要检查是否在仿真模式下正确配置了内存参数。 接下来,用户可能没有正确设置多线程环境。XRT需要特定的环境变量,如XRT_INI_PATH,来启用多线程支持。需要检查这些设置是否存在或正确。例如,创建xrt.ini文件并设置runtime.multiprocess=true可能解决多线程问题。 还有可能是权限问题,比如用户没有访问设备节点的权限。需要确认用户是否在正确的用户组(如render组)中,或者是否有适当的udev规则设置。 另外,引用[3]提到不能使用特定的source命令,否则会导致CMake版本问题。需要确保用户的环境变量没有被错误地覆盖,尤其是Vitis和XRT的路径设置是否正确。 综合以上因素,可能的解决步骤包括:验证XRT安装和编译过程,检查平台配置文件和内存索引,设置正确的环境变量和配置文件,调整权限,以及确保仿真模式下的正确设置。同时,参考Vitis官方教程和社区资源可能会有帮助。</think>### XRT错误解决方案分步指南 针对您遇到的`enable multithreading operation not permitted`和`cannot allocate buffer at unknown memory index`错误,结合ZCU106开发板特性,以下是具体排查步骤: --- #### 一、多线程启用失败分析 1. **检查XRT编译参数** ```bash # 确认编译XRT时启用多线程支持 cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_MULTITHREAD=ON ``` 需在XRT源码编译时显式启用该选项(参考引用[2]自定义编译流程) 2. **验证环境变量配置** ```bash export XRT_INI_PATH=/etc/xrt/xrt.ini echo "runtime.multiprocess=true" >> $XRT_INI_PATH ``` 创建/修改xrt.ini配置文件后,通过`xbutil examine`命令验证多进程支持状态[^4] 3. **用户组权限检查** ```bash sudo usermod -aG render $USER # 添加用户到render组 sudo chmod 666 /dev/dri/renderD128 ``` 重启系统后验证设备节点权限(适用于Ubuntu系统) --- #### 二、缓冲区分配错误解决方案 1. **内存索引映射验证** ```xml <!-- 检查platform.xml中的内存定义 --> <mem_topology> <memory id="0" base_address="0x0" size="0x80000000" type="MEM_DDR4" used="1" tag="HOST[0]"/> <memory id="1" base_address="0x800000000" size="0x100000000" type="MEM_DDR4" used="1" tag="HOST[1]"/> </mem_topology> ``` 需确保kernel连接的`sp`标签与platform定义的内存索引一致(参考Vitis连接器规范) 2. **硬件仿真特殊配置** ```bash export XCL_EMULATION_MODE=hw_emu emconfigutil --platform xilinx_zcu106_base_202210_1 --nd 2 ``` 为hw_emu模式生成正确的仿真配置,特别注意内存通道数量设置[^1] 3. **缓冲区对齐检查** ```cpp cl_mem_ext_ptr_t bank_ext; bank_ext.flags = XCL_MEM_TOPOLOGY; // 对应platform中的bank编号 bank_ext.obj = nullptr; cl::Buffer buffer(context, CL_MEM_READ_WRITE | CL_MEM_EXT_PTR_XILINX, size, &bank_ext); ``` 显式指定内存bank索引(需与Vitis Link报告中的连接关系一致) --- #### 三、系统环境验证 1. **依赖版本检查** ```bash ldd /opt/xilinx/xrt/bin/xclbinutil | grep boost # 应显示boost_system和boost_filesystem版本>=1.72 ``` 版本不匹配会导致隐式错误(常见于自行编译XRT的情况) 2. **Vitis环境隔离** ```bash unset LD_LIBRARY_PATH # 清除可能冲突的路径 source /opt/xilinx/xrt/setup.sh # 优先加载XRT环境 ``` 避免Vitis HLS环境变量覆盖关键配置(参考引用[3]的警告) --- ### 典型错误处理示例 **场景**:运行hw_emu时出现`ERROR: Buffer::Buffer could not map device buffer` ```bash # 解决方案步骤: 1. 检查仿真平台生成命令: emconfigutil --platform xilinx_zcu106_base --nd 2 2. 验证xrt.ini配置: [Emulation] debug_mode=batch user_space_log=all:console 3. 使用xclbininfo检查内存连接: xclbininfo -i binary_container_1.xclbin ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boss-dog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值