VS2017+win10编译LASlib(LASTools)库

配置和编译源码    

       LASlib是进行点云数据读写的理想工具,由北卡计算机学院的Martine isenburg编写。基于该开源库,作者同时开发了LASTool,包含了一系列点云数据处理的工具。LASlib提供了LAS格式的LiDAR点云数据的高效读写接口。因此,对于一些常用的LAS格式的数据操作,LASlib的开源、高效等特性,无疑使其成为一个重要的开发库。

源代码下载地址:http://www.cs.unc.edu/~isenburg/lastools/ 

  1. 下载源码后,解压源码到任意目录(最好是全英文的路径)。
  2. 用VS 2017,打开解压后文件夹中LASlib目录下的LASlib.dsw工程文件。提示需要进行版本升级转换,一直点击确认进行转换。
  3. 右键点击LASlib工程,在属性对话框中选择配置管理器 按钮,新建x64的配置。同时,设置当前配置为x64。 
  4. 右键点击LASlib工程,在属性对话框 -C/C++ -常规下-附加包含目录中删除带有stl的一项。
  5. 打开LASlib工程下的头文件mydefs.hpp,定位到69行,只保留 #if defined(_MSC_VER),删除或注释改行其它代码进行如下修改:
    #if defined(_MSC_VER)/* || defined (__MINGW32__)*/
    typedef int                BOOL;
    #else
    typedef bool               BOOL;
    #endif
    

    引用博文:https://blog.csdn.net/u013045316/article/details/51700543。但是该博文中的第四点如下:4) 右键点击LASlib工程,在属性对话框 - C/C++ -预处理器下增加LASZIPDLL_EXPORTS预编译宏。我在预处理器下加了LASZIPDLL_EXPORTS就报错。所以,千万不要增加LASZIPDLL_EXPORTS预编译宏。

  6. Win 10系统需要,右键LASlib—属性—配置属性—常规—Windows SDK 版本—选择合适的。

    否则可能出现错误:找不到Windows SDK 版本8.1。请安装所需的版本的Windows SDK或者在项目属性页中或通过右键单击解决方案并选择”重定解决方案目标”来更改SDK版本。
    第6点引用了原文链接:https://blog.csdn.net/xinjiang666/article/details/104878678

  7. 编译的时候还是会出现“无法打开源文件<stdio.h>”等很多错误,需要重新添加包含目录,参考博客,实际的路径并不一定如博客中所示,我的VS就安装在了D盘,和参考博客不一样,只要找到那个“include”文件夹,其中还包含“stdio.h”等文件的路径就好。我是用everything工具搜索的stdio.h头文件,然后选择自己Window SDK版本下的路径添加。引用博文:https://blog.csdn.net/xujie126/article/details/80769484。如下所示:

  8. 可以在属性配置中选择自己编译导出静态库lib还是动态库dll。
  9. 测试:首先,配置属性—C/C++—常规——附加包含目录,添加 G:\LAStools\LASlib\inc 和 G:\LAStools\LASzip\src。然后,在库目录中添加如下目录:E:\...\LAStools\LASlib\lib。最后,在配置属性—链接器—输入——添加 LASlib.lib。
  10. 使用LASTools(LASlib)库读写laswen文件的例子,可以下载资源:https://download.csdn.net/download/jacken123456/12326033

 

编译错误及解决办法

(1)错误 35 error C2660: “LASindex::seek_next”: 函数不接受 1 个参数。

解决办法:将自己在预编译器里添加的LASZIPDLL_EXPORTS去掉。

(2)错误 copy/Release/Laslib.lib lib/Laslib.lib。

解决办法:检查是否选的是生成 dll,是的话,在后处理事件中删除掉这句话。

 

其它需要注意的重点:

(1)如果在配置属性常规下面选择了配置类型为动态库DLL没有产生对应的动态库lib,需要修改头文件mydefs.hpp。

//将mydefs.hpp中开头的下面几行注释
//#ifndef _WIN32
//#define LASLIB_DLL
//#else  // _WIN32
//#ifdef COMPILE_AS_DLL
//#define LASLIB_DLL __declspec(dllexport)
//#elif USE_AS_DLL
//#define LASLIB_DLL __declspec(dllimport)
//#else
//#define LASLIB_DLL
//#endif
//#endif // _WIN32

//将上面的替换为下面代码导出lib
#define LASLIB_LIBRARY
#ifdef LASLIB_LIBRARY
#define LASLIB_DLL  __declspec(dllexport)
#else
#define LASLIB_DLL __declspec(dllimport)
#endif

(2)建议将属性页-C/C++-代码生成中的运行库改为多线程DLL(/MD)。关于MD和MT的详细介绍,可以自行百度。

(3)该配置编译的步骤主要参考了网上的一些博文。最后发现,编译出来的静态库是可以正常读写的,但是编译出来的动态库使用不了,因为没有导出LASzip。 而LASlib的动态库依赖于LASzip,不知道是不是没有开放LASzip?了解的同学欢迎在下方留言,谢谢。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: OpenCV是一个开源的计算机视觉和机器学习,可以方便地处理图像和视频。而CUDA(Compute Unified Device Architecture)是由NVIDIA开发的一种并行计算架构,可以加速图形处理器(GPU)上的计算任务。 OpenCV 4.5.1是OpenCV的一个版本,它提供了丰富的功能和算法,用于图像和视频处理、特征提取、目标检测等任务。这个版本可以在Windows 10操作系统上使用,并且可以与Visual Studio 2017集成,提供开发环境和调试工具。 CUDA 10.0是NVIDIA的一个版本,它支持NVIDIA GPU上的并行计算任务。它允许开发人员使用C语言、C++或CUDA自己的扩展语言编写并行计算代码,以加速计算密集型任务。例如,在图像处理中,可以使用CUDA加速OpenCV算法,从而提高计算性能。 而cuDNN(CUDA Deep Neural Network library)是NVIDIA专门为深度学习任务开发的一个。它提供了一组高性能的深度神经网络的基本操作和优化算法,可以与CUDA和OpenCV结合使用。 综上所述,OpenCV 4.5.1可以与CUDA 10.0和cuDNN 7.6.0集成使用。开发者可以在Visual Studio 2017中使用这些工具和进行图像处理和机器学习任务的开发和优化。通过使用CUDA加速,可以提高计算性能,而cuDNN可以提供深度学习任务所需的算法和操作。 ### 回答2: OpenCV 4.5.1是一个计算机视觉,用于在计算机视觉和机器学习项目中进行图像和视频处理。VS2017是一个集成开发环境(IDE),用于Windows操作系统上的软件开发。CUDA(Compute Unified Device Architecture)是一个用于GPU计算的并行计算平台和API模型。CUDNN是NVIDIA深度神经网络,用于在GPU上加速深度学习任务。 在Windows 10上使用VS2017编译OpenCV 4.5.1,并在CUDA 10.0和CUDNN 7.6.0的支持下进行构建可以提供更好的计算性能和加速。CUDA 10.0提供了与CUDA架构和驱动程序的兼容性,并支持许多NVIDIA GPU。CUDNN 7.6.0是基于CUDA的深度神经网络,可以加速深度学习任务的训练和推理。 使用VS2017编译OpenCV可以让开发者方便地在Windows平台上进行开发和调试。VS2017提供了强大的集成开发环境,它可以帮助开发者编写、调试和测试程序。通过配置CUDA 10.0和CUDNN 7.6.0来支持OpenCV的GPU加速,可以进一步提高图像和视频处理的速度和效率。 总结来说,使用OpenCV 4.5.1、VS2017、Windows 10、CUDA 10.0和CUDNN 7.6.0可以实现在Windows平台上的高效计算机视觉和机器学习开发。这种配置可以提供更好的性能和加速,特别是在需要处理大量图像和视频、进行深度学习任务的情况下。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值