文章目录

  • 前言
  • 1.编译环境
  • 2.编译步骤
  • 3.编译中的bug
    • 3.1 下载超时问题,ispc、pybind11、open3d_sphinx_theme等
    • 3.2 boringssl
    • 3.3 DirectXMath、DirectXHeaders
  • 4.验证编译是否成功
  • 5.新建项目中使用
  • 6.静态库整合
    • 6.1 Lib.exe简单使用
    • 6.2 简化后的调用流程

前言

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

1.编译环境

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

2.编译步骤

  • Github下载open3d源码
  • 打开源码,新建build文件夹
mkdir build
cd buildcmake -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 after 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

5.新建项目中使用

PS:3d库都是缝合怪

新建一个C++项目

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

插入如下代码:

#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);
}

6.静态库整合

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

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"
    
  • 调用代码

    
    #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相关推荐

  1. 手把手教你在Windows下使用MinGW编译libav

    2019独角兽企业重金招聘Python工程师标准>>> 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言开发的,不可避免的,libav ...

  2. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  3. opencv + contrib windows下源码编译

    网上,包括书上有很多人云亦云的源码编译方式,不能说不正确但是有很多弯弯绕绕(坑).最近刚做完了一个识别项目的第一个版本,总结了一下..为了写这篇文章,特意重新在自己电脑搭了一遍开发环境. 最权威的方式 ...

  4. 3Dslicer在windows下源码编译源码并打包程序亲测可用

    对于医疗图像数据可视化有一些比较成熟的开源软件库,其中包括volview(2011年已经停止维护和更新),MITK(德国非中科大版),3Dslicer和ITK-SNAP.3Dslicer功能非常的强大 ...

  5. windows和linux下源码编译7-Zip(7za)

    windows和linux下源码编译7-Zip(7za) 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:129518033 文章目录 windows和l ...

  6. Windows10下源码编译MXNet C++ api with OpenBlas

    为什么要编译等这种介绍性的文字就不多说了.直入主题:Windows下源码编译mxnet MXNet的依赖相对而言是比较少的了,但编译起来也不简单. 你可以按照官方的文档来编译,按道理来讲,结果都是一样 ...

  7. 手把手教你带货直播源码实现直播功能,不依赖第三方SDK

    手把手教你带货直播源码实现直播功能,不依赖第三方SDK 先上图: 推流的手机 拉流的网页和VL播放器 拉流的手机客户端 下面开始实现手机直播功能 1.首先你要准备一份编译好的ffmpeg+x264库, ...

  8. vc6可编译的 linux 源码,Linux 下源码编译FFMEG

    1. 安装依赖关系 $ sudo apt-get update $ sudo apt-get -y install autoconf automake build-essential libass-d ...

  9. centos lnmp源码安装mysql_CentOS 6.6 下源码编译安装MySQL 5.7.5

    说明:CentOS 6.6 下源码编译安装MySQL 5.7.5 1. 安装相关工具 # yum -y install gcc-c++ ncurses-devel cmake make perl \ ...

最新文章

  1. 数据库基本概念 - 表、字段、sql语句
  2. CC2530, 各种智能家居通信技术比较
  3. 四、规则组织的衍生组织——经向破斜组织数学模型的建立
  4. 阿里巴巴合伙人闻佳:创新背后的文化与组织
  5. springmvc的运行流程
  6. dva/dynamic
  7. ASP.NET MVC3 系列教程 - 如何使项目Debug进MVC3源代码
  8. Linux下载GEO数据,最简单的IGS精密星历等数据下载方法PPT
  9. DIY年轻人的第一辆电动滑板车
  10. CTS、CLS和CLR
  11. Dev-C++5.11游戏创作之简易游戏(之前的登录软件与跑酷程序的结合)
  12. 老男孩教育侵权之后使出了八大“绝招“,撒谎水平爆炸!真相在这里!
  13. 地址总线是单向还是双向_大余双向钢塑土工格栅%/*的作用泰安恒大工程材料-老友网...
  14. vue使用高德地图小demo(标记点,画线,3D,叠加图片图层)
  15. 尚在人间,何处不青春
  16. 单片机、ARM、MUC、DSP、FPGA、嵌入式
  17. php获取微信公众号用户信息头像,微信公众号的web页面如何获取微信用户名和头像?...
  18. 谷歌浏览器如何设置搜索结果的语言
  19. 我的世界win10版与java版_我的世界java版和win10版的区别
  20. 为什么国内互联网中大厂都酷爱造轮子?

热门文章

  1. c语言上机考题库,C语言上机考题库.doc
  2. 2018最新史上最全SpringBoot视频教程(完整)
  3. 解决 CMD 命令行中文件路径有空格
  4. Python日期的加减
  5. break跳出几层循环_Go循环语句的使用
  6. P1823 [COI2007] Patrik 音乐会的等待(单调栈)
  7. 使用echarts制作泡泡效果
  8. 深度学习总结:深层神经网络(tensorflow实战)
  9. 计算机视觉中的注意力机制
  10. 7、刷牛客网SQL题(一)