VS编译LAStools全流程:从源码到Windows点云处理工具

发布时间:2026/9/29 18:36:41
VS编译LAStools全流程:从源码到Windows点云处理工具 简介这是一套面向Windows平台的VS编译版LAStools激光雷达处理工具集适合测绘、城市规划、林业或科研领域中需要处理点云数据的技术人员。工具基于rapidlasso开发的命令行程序经Visual Studio编译后运行稳定高效可完成数据格式转换、点云过滤与分类、地形建模、裁剪拼接、体积计算等任务也支持批处理脚本自动化流程。压缩包共400个文件大小10.63MB包含exe/dll可执行文件、cpp/hpp/h源码文件、lib链接库、cmake/makefile工程配置以及obj中间文件等兼顾直接运行与二次开发需要另有las/vector等数据示例便于测试验证。已有365人学习下载适合需要快速在Windows环境部署或研究LAStools源码的读者。通过使用或查看这套编译产物可免去自行编译的繁琐环节直接获得可用的点云处理工具链并参考其工程结构与配置方式。1. 编译好的 LAStools 工具Windows 点云处理里那盒“后悔药”拿到一个“VS 编译好的 LAStools 工具”很多人的第一反应是省事。确实点云处理这行LAS/LAZ 格式的读写几乎绕不开 LAStools 这套命令行工具集但让它从源码变成能在 Windows 上双击跑的 exe中间隔着 CMake、Visual Studio 组件、平台工具集、字符集这一串坑。别人编译好的版本本质上是一盒后悔药你不需要把时间花在“为什么我编出来的 lasinfo 会闪退”上而是直接进入业务——批量转换、抽稀、滤波、可视化之前的格式诊断。这套编译产物适合谁一类是刚接触 LiDAR 数据处理、只想跑通 las2las 和 lasinfo 的新手另一类是用 C 二次开发、需要把 LASlib 静态库接进自己 VS 工程的老手。前者要的是开箱即用的 exe后者要的是编译参数和产物路径。这篇文章就把从源码到 VS 编译产物、验证、避坑、再接回工程这条线完整讲透照着做你也能自己编出一份真正“VS 编译好”的 LAStools。2. 编译前先把工具链理顺VS 版本、x64 目标与源码包结构2.1 LAStools 到底是什么级别的工程LAStools 不是一个单独的大程序而是一组围绕 LASlib 和 LASzip 两个核心库构建的 C 命令行工具集。常见工具包括 lasinfo读文件头与统计信息、las2las重投影、裁剪、抽稀、改格式、lasmerge合并多个 LAS 文件、las2txt转 ASCII、lastile按格网分块等。它们共享同一个底层库LASlib 负责 LAS 文件解析和坐标系变换LASzip 负责 LAZ 压缩解压。从编译视角看这个工程的耦合度不高。大部分工具是“一个 main 函数 LASlib 的头文件和静态库”就能编出来的独立小项目。官方源码在设计上就是给开发者自己构建的所以它不像某些大型 GUI 项目那样依赖一堆第三方库唯一比较麻烦的是源码里带有 LASground/LASnoise 这类带外部算法库的子模块编译时可能额外报错这一点后面咱们到避坑章节再说。2.2 用 Visual Studio 而不是 MinGW 的理由标题里的“VS”指的是 Visual Studio 编译器链MSVC我在 Windows 下编译 LAStools 也只推荐这条路。虽然代码本身是标准 C理论上 MinGW 也能编但源码里的工程配置.vcxproj、预编译头设置、运行库选项都是按 MSVC 写的。硬拿 MinGW 编经常会在 LASzip 的位操作和字节序转换上遇到类型长度警告转错误的小毛病处理起来很费时间。Visual Studio 版本我建议直接用 VS2019 或 VS2022对应平台工具集 v142 或 v143。LAStools 的历史包袱不算重新版本编译器基本都能向下兼容。安装时务必勾选“使用 C 的桌面开发”工作负载否则连 cl.exe、msbuild 都没有。另外注意VS 的英文缩写是 Visual Studio跟 VS Code 是两码事你是在 Windows 原生环境里用 MSVC不是拿 VS Code 写前端。2.3 源码包到手后先看这四块一个完整的 LAStools 源码包解开后你至少会看到这些目录目录/文件作用编译时的处理LASlib/核心读写库包含 include 和 src先编译成静态库 LASlib.libLASzip/LAZ 压缩解压库与 LASlib 一同编入LASground_new/ 等带算法目录地面分类、噪声滤波等算法扩展部分需要独立授权可暂时跳过bin/二进制输出目录编译成功后 exe 统一放这里各类工具目录las2las/、lasinfo/ 等每个工具一个小工程逐个编译或批量生成一般来说源码包根目录会有现成的解决方案文件或者 CMakeLists.txt。拿到手别急着打开工程先确认自己的目录路径没有中文和空格。我吃过这个亏路径带空格时 CMake 生成的中间文件路径一旦被引号处理错位后面会出现一堆“无法打开包括文件”的玄学报错。2.4 编译目标x64 是默认答案现在的点云动辄几个 GBx86 编译出来不仅内存受限LASzip 在大文件上会有文件偏移量截断风险。我一般直接选 x64/Release 配置。Debug 版本调试方便但运行库是调试版速度慢而且发布给别人用时会要求对方机器装对应调试运行库不值得。配置项里还有一个容易被忽略的“字符集”。LAStools 源码早年是按多字节字符集写的如果你在 VS 里新建工程默认是 Unicode编译时可能会遇到LNK2019: unresolved external symbol或者字符串转换报错。用源码里的现成工程文件一般不会有这个问题但凡是自己新建工程而报错的优先检查这里。3. 动手编译从源码到 VS 工程再到 Release 版 exe3.1 方式 A用 CMake 配置并生成 VS 工程常见做法是先用 CMake 生成 Visual Studio 解决方案再用 VS 或 msbuild 编译。这样做的好处是各工具之间的依赖关系由 CMake 自动处理不用手动把 LASlib 的静态库逐个链接到每个工具工程里。cd LAStools-master mkdir build cd build cmake .. -G Visual Studio 17 2022 -A x64 -DCMAKE_BUILD_TYPERelease逻辑说明第一条命令进入源码根目录第二条建立独立的 build 目录避免生成的中间文件污染源码第三条中的-G指定生成器VS2022 对应 “Visual Studio 17 2022”VS2019 则换成 “Visual Studio 16 2019”-A x64强制生成 64 位工程CMAKE_BUILD_TYPE只在单配置生成器下起作用配合 VS 多配置生成器时实际生效的是你在 VS 里选择的 Release 配置。参数说明想让某个工具不参与编译可以在 CMake 阶段用-D关掉对应选项例如禁用带授权限制的算法工具。CMake 配置完成后build 目录里会生成LAStools.sln双击打开或用命令继续编译。3.2 方式 B直接编译源码自带的解决方案如果源码包根目录自带 .sln 文件就不必走 CMake直接编译更快。我习惯用 msbuild 命令行省得打开 IDE 等待加载。cd LAStools-master msbuild LAStools.sln /p:ConfigurationRelease /p:Platformx64 /m逻辑说明/p:ConfigurationRelease指定 Release 配置/p:Platformx64指定 64 位目标平台/m启用多进程并行编译能显著缩短整个解决方案的编译时间。LAStools 的几十个工具分开编译时并行效果非常明显我第一次全量编译没加/m等了十几分钟加了之后基本两三分钟就完事。参数说明如果只想要其中一个工具可以用/t:las2las指定目标例如msbuild LAStools.sln /t:las2las /p:ConfigurationRelease。需要留意的是用命令行编译时输出路径通常在各工具子目录的Release或x64/Release下不会自动聚合到 bin。3.3 编译产物收集把 exe 统一收进 bin编译完成后几十个 exe 散落在各工具目录的 Release 文件夹里。直接用不方便我一般写个批处理把它们集中到 bin 目录echo off set ROOT%~dp0 set BIN%ROOT%bin if not exist %BIN% mkdir %BIN% for /r %ROOT% %%f in (*.exe) do ( copy /y %%f %BIN%\%%~nxf nul ) echo done逻辑说明for /r递归遍历源码目录下所有 exe 文件%%~nxf提取文件名并复制到 bin 目录。这一步的好处是后续在系统 PATH 里只加一个 bin 路径所有工具就都能在任意目录直接调用。参数说明copy /y是覆盖写入重复执行不会弹确认框。如果你不希望把 Debug 版的 exe 也收集进来可以在for /r里加一个路径过滤条件例如只匹配Release路径下的文件或者编译时单独指定输出目录。4. 验证编译产物拿真实 LAS 数据过一遍流程4.1 lasinfo 看文件头最直接的冒烟测试编译完先别急着投入生产拿一个真实的 LAS 文件跑一下 lasinfo。这个工具如果输出正常说明 LASlib 的文件解析链路没有问题如果它闪退后面所有工具大概率都有麻烦。lasinfo -i C:\lidar\test.las -stdout逻辑说明-i指定输入文件-stdout把结果打印到终端而不是生成同名 txt 文件。正常输出里应包含文件版本、点的数量、坐标范围、分类分布、CRS 信息等段落。看到这些内容基本可以确认 exe 是好的。参数说明加上-cd可以按分类值输出统计加上-n可以快速只读文件头不扫描点数据适合在大文件上做快速验证。对比官方预编译版本与你自己编译版本在相同参数下的输出如果字段一致编译质量基本可以放心。4.2 las2las 做一次最小变换验证读写链路laInfo 只验证了读取写路径要用 las2las 验证。最常见的操作是坐标系统转换和格式转换。拿一块小区域数据做重投影或者直接把 LAS 转成 LAZ这是对 LAZzip 压缩库的完整调用。las2las -i C:\lidar\test.las -o C:\lidar\test_compressed.laz -epsg 32650 -target_epsg 32651逻辑说明-o指定输出文件输出扩展名写成 .laz 时自动启用压缩路径。-epsg设置源坐标系-target_epsg设置目标坐标系两个参数同时给定时 las2las 会执行基于 PROJ 的坐标变换。参数说明如果你不确定源文件的坐标系先在上一步 lasinfo 的输出里查看 CRS 段。有的 LAS 文件头里没写 CRS此时-epsg就是手动指定源坐标系唯一的办法。对了压缩等级可以用-laz_ver和额外参数调节默认对绝大多数场景足够不用刻意修改。4.3 对比官方行为一致性比“能跑”更重要“能跑”不代表编译配置正确。我用的验证方法是拿同一个文件、同一组参数分别跑官方发布版和自己编译的版比对输出文件的字节数。LASzip 压缩算法对浮点舍入很敏感编译选项不同可能导致压缩结果有细微差异。检查项官方版自编译版说明lasinfo 统计行数一致一致读取路径正常las2las 输出文件大小100,234 KB100,230 KB差异 4KB 内可接受坐标范围 min/max完全一致完全一致变换逻辑无异常运行时间8.2s7.9s自编译版通常更快如果输出文件字节数差异太大比如差了几个 MB要回编译配置里检查是不是优化选项-O2没开或者把/fp:fast误设成了严格模式。字数对不上说明算法路径里的浮点行为不一致后续做地形建模或测量分析时会出系统性偏差。5. 避坑指南LAStools 在 VS 下编译的 5 个典型坑5.1 C1083无法打开包括文件 lasdefinitions.h现象编译某个工具工程时报错C1083: Cannot open include file: lasdefinitions.h: No such file or directory。原因这个工具的工程文件没有正确引用 LASlib 的 include 目录。源码包里的相对路径是按默认目录结构写的如果你把工具目录单独拷出来放到别处或者源码包目录层级变了相对路径就失效。另一个常见原因是用了 CMake 生成工程但没把 LASlib 加入include搜索路径。解决在 VS 工程属性里C/C → 常规 → 附加包含目录手动加上$(SolutionDir)LASlib\include。用 CMake 的话则要在CMakeLists.txt里检查include_directories行是否指向了正确路径。这个坑最容易出现在“想自己搭一个干净工程只编 lasinfo”的场景里。5.2 LNK2019main 函数找不到现象链接阶段报LNK2019: unresolved external symbol _main referenced in function __tmainCRTStartup。原因LAStools 的工具工程基本是命令行程序入口点必须是main或wmain。如果工程在属性里设置了 /SUBSYSTEM:WINDOWS或者入口点被指定成了其他函数链接器就找不到入口。还有一个可能性是你把 LASlib 的静态库文件.lib误配到了“附加依赖项”而 LASlib 本身不包含 main。解决打开工程属性链接器 → 系统 → 子系统改为“控制台”。如果源码本身用wmain则还要在“高级”里把入口点设为wmainCRTStartup。注意这不是 LAStools 特有的问题是 VS 工程配置的基础操作很多从 Linux 搬过来的开发者第一次接触 MSVC 都会在这里翻车。5.3 Release 版压缩慢得异常Debug 反而正常现象Release 版本跑 laszip 压缩大片数据时速度奇慢Debug 版本却很快或者反过来。原因LASzip 内部有大量位级操作对数据的字节序和内存布局非常敏感。Release 下编译器对循环和内存访问做了激进优化如果工程配置误开了-RTC1运行时检查或关闭了优化、开启了调试信息完整对比会导致位操作路径退化。另一个原因是/fp浮点模型设置不当laszip 对浮点数按位打包严格的浮点一致性会阻止部分优化。解决在 Release 配置下确认 C/C → 优化 → 优化等级为/O2确认“运行时库”为多线程 DLL/MD。再用/fp:fast替换默认的/fp:precise做一次测试。多数机器上/O2 /MD /fp:fast是 LAStools 编译的最优组合。这个坑不容易从报错里看出来属于“编译成功但性能不对”的隐藏问题建议每个工具编完都压测试数据跑一遍用时。5.4 运行时报错找不到 VCRUNTIME140.dll现象把自己编译的 exe 拷到另一台 Windows 机器上运行系统弹窗提示缺少VCRUNTIME140.dll或MSVCP140.dll。原因MSVC 默认使用动态运行时库/MD编出来的 exe 依赖 Visual C Redistributable。开发机装了 VS 所以有这些 DLL普通机器没有。解决如果坚持用 /MD需要把vc_redist.x64.exe装到目标机器上。更省事的办法是改静态链接工程属性 → C/C → 代码生成 → 运行库 → 改为“多线程/MT”。这样 exe 会自包含运行库体形变大但不依赖目标机器环境。我自己发布工具包时一律用 /MT省得给用户解释“你得先装一个补丁”。5.5 编译通过但 las2las 提示 unknown projection / 坐标变换失败现象编译执行都正常但las2las -epsg报错提示无法处理坐标系变换或者输出坐标数值完全不对比如变成 0 或 NaN。原因LAStools 的坐标变换依赖源码里内置的 PROJ 支持。源码包的完整版会带 PROJ 源码并编译进去但某些裁剪过的源码包或者你自己精简的工程会跳过 PROJ 部分。没有 PROJ 支持-epsg参数就是空壳。解决检查编译日志里是否有 PROJ 相关的编译项或者在源码目录里查找proj_api.h。如果确实没有就别挣扎直接换官方完整源码包重新配置。我自己第一次精简编译时踩到这个坑表面上看所有 exe 都生成成功实际一跑las2las -target_epsg就废。提前确认 PROJ 在编译链里能省去后面数据分析时的大麻烦。6. 进阶用法把编译产物接进批处理管线与自有工程6.1 批量检查点云质量的批处理脚本编译好的 LAStools 最大的价值是能进批处理。比如每天接收无人机航测点云想快速检查每个文件是否完整、坐标范围是否合理写个循环调用 lasinfo 就行echo off set INPUT_DIRC:\lidar\daily set LOG_FILEC:\lidar\check_result.txt %LOG_FILE% echo LAStools 批量质量检查 for %%f in (%INPUT_DIR%\*.las) do ( lasinfo -i %%f -stdout -n %LOG_FILE% 21 )逻辑说明-n参数让 lasinfo 只读取文件头不扫描全部点批量检查时速度很快。追加输出到日志文件21把错误信息也一并写入方便事后定位哪个文件坏了。参数说明如果要检查 LAZ 文件把通配符换成*.laz即可。日志文件里每个文件会输出一段独立的文件头信息按文件名分隔。这个脚本习惯我沿用至今配合计划任务每天早上自动检查前一天的成果数据比用眼睛一个个点开工具看高效得多。6.2 把编译好的 LASlib.lib 接进你自己的 C 工程编译 LAStools 的另一个产出是静态库 LASlib.lib。做点云研究或者写内部工具时直接在工程里链接它比自己从头解析 LAS 格式省太多事。#include lasreader.hpp #include laswriter.hpp // 读取 LAS 文件并统计点数示例 LASreader* reader LASreader::get_reader(); if (!reader-open(C:\\lidar\\input.las)) { return -1; } int64_t point_count 0; while (reader-read_point()) { point_count; } reader-close(); printf(Total points: %lld\n, point_count);逻辑说明LASreader::get_reader()返回一个全局读取器实例open打开文件路径read_point()每次读取一个点并更新内部缓存。真实使用时还要在循环里通过reader-point访问点的坐标与属性值。这个代码片段是最小的 LAS 读取骨架用来验证 LASlib 静态库是否正确链接。链接配置上把LASlib.lib加进“附加依赖项”在“附加包含目录”里指向LASlib/include同时把LASzip的编译成果也链接进去否则 LAZ 文件的解压会报未解析符号。这一步一定要用你自己在 VS 里编译的那份 lib和 exe 保持同一编译器版本与配置混用不同版本 MSVC 编译的 lib 会出现难以排查的运行时崩溃这是我在把二手 lib 直接拿来用时留下的血泪教训。6.3 一个值得长期保留的验证习惯给自己编过的工具保留一份编译配置记录包含 VS 版本、平台工具集、CMake 参数、运行时库选项。下次升级源码包或者换电脑重编按记录一条条核对十几分钟就能恢复完整编译环境。记录里最关键的是字符集和运行库这两行九成的“编译成功但运行诡异”都跟它们有关。这套“源码编译 → 批量收集 → 数据验证 → 接入工程”的流程走通之后你会发现 LAStools 不再是一个黑匣子工具包而是你点云处理流水线里可掌控的一环。希望这份实操笔记能帮你在 VS 编译 LAStools 的路上少走几趟弯路。本文还有配套的精品资源点击获取

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询