open3D cmake+win10+vs2019编译

文章讲述了在将Python版open3D迁移到C++环境时遇到的挑战,包括地址访问冲突、std::bad_alloc异常、第三方库下载及编译错误。作者详细描述了如何解决DirectX-Headers下载失败导致的编译问题,以及在不同编译模式(debug和release)下遇到的库冲突。最终,作者指出在同一项目中不能同时编译debug和release版本的open3D,并强调动态库编译也存在类似问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       已经采用python版open3D实现和验证了功能,但是在C++迁移上却遇到了不少问题:

                1、可能是与本地的编译器存在差异,在使用open3D git上的winows版本时,存在地址访问冲突和std::bad_alloc等问题。前者在使用IO读写时必现,后者在生成kdtree时必现。

                2、编译问题。无法绕开1中的问题,在本地重新编译open3D,又遇到了其他问题:

                1)第三方库下载失败问题。此时就要根据downloading后的地址将第三库下载下来,并放到3rdparty_downloads文件加下的对应文件夹内。典型问题如下图所示,图中需要下载webrtc_60e6748_win.zip并放到3rdparty_downloads/webrtc/下。

                2) Microsoft.CppCommon.targets(241,5): error MSB8066。具体报错如下图所示,此问题可在网上搜索到很多解决方案,但都不适用于此。

                 最终在排查时,发现在报MSB8066错误之前,会出现如下图所示的提示,因此该问题是下载DirectXD-Headers失败引起的。在https://github.com/microsoft/DirectX-Headers.git下载​DirectX-Headers,并拷贝到build文件加下的uvatlas/src/ext_directxheaders夹下,编译成功。

        其他:上述是在默认情况下(不改变cmake文件)完成的编译,最终编译为debug静态库。此时发现若直接在该工程内编译release版本会报MT和MD冲突的错误。尝试了很多种方法,最终发现不能再一个工程中同时编译debug和release,可能原因是更改编译模式后Open3D并没有对某些第三方库将进行更新编译。注意:编译为动态库时也会存在相同的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值