手把手教你在windows下源码编译Open3D

这篇具有很好参考价值的文章主要介绍了手把手教你在windows下源码编译Open3D。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

首先不建议windows下源码编译,需要用C++的可以直接下载官网编译好的版本。熟悉vcpkg的,可以把open3d加到vcpkg使用,参考该博客。

1.编译环境

  • cmake >=3.20
  • python >=3.6.0
  • visual studio >=2017

2.编译步骤

  • Github下载open3d源码
  • 打开源码,新建build文件夹
mkdir build
cd build

cmake -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="<open3d_install_directory>" ..

填写你的VS版本,例vs2022(17),open3d_install_directory使用当前路径".",最终命令为:

cmake -G "Visual Studio 17 2022" -A x64 -DCMAKE_INSTALL_PREFIX="." ..
  • 编译,会出现一系列错误,按照提示解决。重复编译过程直至没有Error提示
cmake --build . --config Release --target ALL_BUILD
  • 安装,生成include和lib
cmake --build . --config Release --target INSTALL

3.编译中的bug

3.1 下载超时问题,ispc、pybind11、open3d_sphinx_theme等

报错信息类似:

 error : downloading 'https://github.com/xxx/'
  • 开vpn手动点击报错链接中的url用浏览器下载,然后复制粘贴到"Open3D-master\3rdparty_downloads"相应的库文件下。
  • 替换相应文件下的未下载完成的文件,例如:下载pybind11-2.6.2.tar.gz改名替换为Open3D-master\3rdparty_downloads\pybind11\v2.6.2.tar.gz。
  • one-20190522.tar.gz 是parallelstl库下的文件 -> 20190522.tar.gz
  • 建议先把boringssl、curl这两个库替换好,curl是下载用的库。下好后可能以上的超时问题会消失一些,博主本人是一个个替换的,最后才根据cmake报错装的curl

3.2 boringssl

这个库的下载路径不存在,所以需要去GitHub下载boringssl-master.zip

  • 解压后用7z压成.tar
  • 把.tar压成gzip
  • 把boringssl-master.tar.gz改名替换boringssl_edfe413_win_amd64.tar.gz

3.3 DirectXMath、DirectXHeaders

fatal: unable to access 'https://github.com/microsoft/DirectXMath.git/': Failed to connect to github.com port 443 aft
  er 21085 ms: Timed out

博主的 curl 下载并编译好后,会自动下载装好。上述方法不行试试,github下载了DirectX-Headers-mains和DirectXMath-main,并解压到build\uvatlas\src\ext_directxheaders和build\uvatlas\src\ext_directxmath

4.验证编译是否成功

随便打开build\bin\examples\Release\下的例程,例如:Draw.exe
手把手教你在windows下源码编译Open3D

5.新建项目中使用

PS:3d库都是缝合怪

新建一个C++项目

  • 包含Build下的includeinclude\open3d\3rdparty
  • 打开build/open3d.sln 找到 example/cpp中的任意一个项目
    • 库目录添加build\bin\Release路径,然后照抄范例中的附加目录
    • 照抄范例的预处理器,不然会报错fmn重复定义(LNK2005) 等错误
  • 项目需Release-x64的项目,Debug需要重编译
  • 项目->属性->c/c++代码生成 更改成 “多线程(/MT)”
    手把手教你在windows下源码编译Open3D

插入如下代码:

#include <iostream>
#include "open3d/Open3D.h"

using namespace open3d;

int main(){
	// 从github上下载pcd文件,也可以自己找一个pcd文件
    auto demo_crop_data = data::DemoCropPointCloud();
    auto cloud_ptr = std::make_shared<geometry::PointCloud>();
    if (io::ReadPointCloud(demo_crop_data.GetPointCloudPath(),*cloud_ptr)) {
        utility::LogInfo("Successfully read {}",demo_crop_data.GetPointCloudPath());
    } else {
        utility::LogWarning("Failed to read {}",demo_crop_data.GetPointCloudPath());
        return 1;
    }
    cloud_ptr->NormalizeNormals();
    visualization::DrawGeometries({ cloud_ptr },"PointCloud",1600,900);
}

手把手教你在windows下源码编译Open3D

6.静态库整合

上面链接的静态库太多,故使用visual studio工具lib.exe(官方文档)进行合并,简化调用流程。由于lib.exe的合并的函数限制,把上面的的静态链接库按照体积分两份。

手把手教你在windows下源码编译Open3D

6.1 Lib.exe简单使用

输入cmd命令lib.exe /out:xmv1.lib Open3D.lib assimp-vc143-mt.lib 等

可以用python处理之前的链接路径,最后得到所有链接路径(绝对路径)。还没看懂的可以去看看这篇博客。

最后多个静态链接合并成xmv1.lib和xmv.lib

6.2 简化后的调用流程

  • 添加头文件,包含build下的includeinclude\open3d\3rdparty

    D:\3rdparty\Open3D-master\build\include
    D:\3rdparty\Open3D-master\build\include\open3d\3rdparty
    
  • 引用链接库

    #pragma comment(lib, "xmv.lib")
    #pragma comment(lib, "xmv1.lib")
    
  • 添加预处理器

    %(PreprocessorDefinitions)
    WIN32
    _WINDOWS
    _CRT_SECURE_NO_WARNINGS
    NDEBUG
    OPEN3D_CXX_STANDARD="14"
    OPEN3D_CXX_COMPILER_ID="MSVC"
    OPEN3D_CXX_COMPILER_VERSION="19.34.31933.0"
    OPEN3D_CUDA_COMPILER_ID=""
    OPEN3D_CUDA_COMPILER_VERSION=""
    ZMQ_STATIC
    BUILD_ISPC_MODULE
    BUILD_GUI
    BUILD_WEBRTC
    WITH_IPPICV
    _GLIBCXX_USE_CXX11_ABI=0
    WINDOWS
    _CRT_SECURE_NO_DEPRECATE
    _CRT_NONSTDC_NO_DEPRECATE
    _SCL_SECURE_NO_WARNINGS
    NOMINMAX
    _USE_MATH_DEFINES
    _ENABLE_EXTENDED_ALIGNED_STORAGE
    __TBB_LIB_NAME=tbb_static
    OPEN3D_STATIC
    GLEW_STATIC
    FMT_HEADER_ONLY=0
    FMT_USE_WINDOWS_H=0
    FMT_STRING_ALIAS=1
    TINYGLTF_IMPLEMENTATION
    STB_IMAGE_IMPLEMENTATION
    STB_IMAGE_WRITE_IMPLEMENTATION
    TINYOBJLOADER_IMPLEMENTATION
    MKL_ILP64
    CMAKE_INTDIR="Release"
    
  • 调用代码文章来源地址https://www.toymoban.com/news/detail-446508.html

    
    #include <iostream>
    #pragma comment(lib, "xmv.lib")
    #pragma comment(lib, "xmv1.lib")
    
    #include "open3d/Open3D.h"
    
    using namespace open3d;
    
    int main()
    {
        auto demo_crop_data = data::DemoCropPointCloud();
        auto cloud_ptr = std::make_shared<geometry::PointCloud>();
        if (io::ReadPointCloud(demo_crop_data.GetPointCloudPath(),*cloud_ptr)) {
            utility::LogInfo("Successfully read {}",demo_crop_data.GetPointCloudPath());
        } else {
            utility::LogWarning("Failed to read {}",demo_crop_data.GetPointCloudPath());
            return 1;
        }
    
        auto redWoodRGBD = data::SampleRedwoodRGBDImages();
        auto image_ptr = std::make_shared<geometry::Image>();
        if (io::ReadImage(redWoodRGBD.GetColorPaths()[0],*image_ptr)) {
            utility::LogInfo("Successfully read {}",redWoodRGBD.GetColorPaths()[0]);
        } else {
            utility::LogWarning("Failed to read {}",redWoodRGBD.GetColorPaths()[0]);
            return 1;
        }
    }
    

到了这里,关于手把手教你在windows下源码编译Open3D的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【运维】手把手教你在windows使用Docker搭建Minio[详细教程]

    目录 1什么是Minio 2安装Docker 3Docker搭建Minio 4.创建Minio容器并运行 5.进行访问 6安装可能出现的问题         MinIO是一个基于开源的对象存储服务器,MinIO的设计目标是提供高性能、高可用性和高可靠性的对象存储服务。MinIO可以作为一个独立的对象存储服务,也可以在Kuber

    2024年02月06日
    浏览(62)
  • 【Docker】手把手教你在windows使用Docker搭建Minio[详细教程]

    目录 1什么是Minio 2安装Docker 3Docker搭建Minio 4.创建Minio容器并运行 5.进行访问 6安装可能出现的问题         MinIO是一个基于开源的对象存储服务器,MinIO的设计目标是提供高性能、高可用性和高可靠性的对象存储服务。MinIO可以作为一个独立的对象存储服务,也可以在Kuber

    2024年01月19日
    浏览(61)
  • 手把手教你在Linux/Windows系统使用Nginx部署多个前端项目【详细操作】

            需求:项目上线需要将前端的前台和后台部署在服务器上提供用户进行使用,部署在不同的服务器直接在服务器安装nginx即可。但是在内网安装还是有点麻烦,因为需要联网,如果是内网可以参考Linux安装Nginx并部署前端项目【内/外网-保姆级教程】_MXin5的博客-CSDN博

    2024年02月14日
    浏览(61)
  • 【运维】手把手教你在Linux/Windows系统使用Nginx部署多个前端项目【详细操作】

            需求:项目上线需要将前端的前台和后台部署在服务器上提供用户进行使用,部署在不同的服务器直接在服务器安装nginx即可。但是在内网安装还是有点麻烦,因为需要联网,如果是内网可以参考Linux安装Nginx并部署前端项目【内/外网-保姆级教程】_MXin5的博客-CSDN博

    2024年02月08日
    浏览(61)
  • 【MMDeploy&MMPose】手把手教你在Windows上使用MMDeploy1.x进行ONNX和TensorRT的部署(Python篇)

    2023.9.8更新 C++ SDK篇已经发布,点击这里传送到文章 MMDeploy 提供了一系列工具,帮助我们更轻松的将 OpenMMLab 下的算法部署到各种设备与平台上。 MMDeploy 定义的模型部署流程,这里直接使用了官方文档的内容,如下图所示:  1)模型转换(Model Converter) 模型转换的主要功能是

    2024年01月16日
    浏览(50)
  • 【实战】手把手教你在 vscode 中写 markdown

    markdown 语法、markdown 插件咱先放放,先说最头疼的,图片问题 相对于 HBuilder 自带 markdown 图片粘贴功能来说,vscode显得不那么友好,若是不装插件粘贴截图就只能手动进行如下操作: 截取图片 将图片存在特定位置 在markdown文件中通过路径引入图片 预览 最终我找到了 Paste I

    2024年02月13日
    浏览(72)
  • 手把手教你在 CentOS 7 下升级 OpenSSL

      这篇文章记录着如何在 CentOS 7 上升级 OpenSSL。会逐步介绍所需步骤,包括备份,下载和安装,以及配置等。 OpenSSL 是用于保护数据安全的重要工具。它能提供加密,解密等多项功能。然而,随着技术的发展和新的安全漏洞的出现,使用最新版本的 OpenSSL 成为了重要的需求

    2024年02月16日
    浏览(68)
  • 手把手教你在ARM板上写一个驱动程序!

    摘要:搞嵌入式有两个方向,一个是嵌入式软件开发(MCU方向),另一个是嵌入式软件开发(Linux方向)。其中MCU方向基本是裸机开发和RTOS开发。而Linux开发方向又分为驱动开发和应用开发。其中应用开发相比于驱动开发来说简单一些,因为搞驱动你要和Linux内核打交道。而我们普

    2024年02月01日
    浏览(87)
  • 【最新】手把手教你在VMware中安装Ubuntu虚拟机

    前言 前段时间卸载了Ubuntu双系统,但是发现还是需要使用Ubuntu,遂决定在虚拟机中装一个Ubuntu系统。 已经装有VMware的可以忽略此步。 (1)点击VMware官网下载VMware。 (2)使用Windows系统的点击红色方框处进行下载。 这是笔者下载好的Windows系统使用的VMware17.0.0 VMware17.0.0百度云

    2024年03月28日
    浏览(59)
  • 手把手教你在Docker中安装Nginx(图文超详细)

    本文介绍如何在 Windows Docker Desktop 平台安装 Nginx 容器(Linux 平台同样适用),并详细讲解如何配置 Nginx ,实现 HTTP 请求在后端服务器集群间的负载均衡。 访问 dockerhub 查找所需的镜像版本: 这里我选择 1.24.0 版,执行如下命令: 命令执行结果: 随后,我们第一次运行镜像,

    2024年03月16日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包