Linux下PotreeConverter安装及运行报错问题求助
PotreeConverter安装与运行问题解决
问题描述
按照官方说明在Linux系统安装PotreeConverter(master分支)时遇到两个问题:
- 执行
sudo make install报错:make: *** No rule to make target 'install'. Stop. - 手动将build目录下的
PotreeConverter二进制文件复制到/usr/bin后,执行转换命令出现文件系统错误:
terminate called after throwing an instance of 'std::filesystem::__cxx11::filesystem_error' what(): filesystem error: cannot make canonical path: No such file or directory [/home/username/Documents/potreeExamplesNubePuntos/PotreeConverter] [1] 23691 IOT instruction (core dumped) PotreeConverter ./DenseCloud9_2.las -o . --generate-page potree_page_2
但直接运行build目录下的本地二进制文件能正常工作。
原因分析
make install失败原因:PotreeConverter的master分支CMake配置未添加install规则,没有对应的安装目标,因此make install无法执行。- 复制二进制后运行报错原因:PotreeConverter运行时需要读取自身所在目录同级的
resources文件夹(包含网页模板、前端依赖文件等)。将二进制单独复制到/usr/bin后,程序找不到对应的resources目录,从而触发路径错误。本地build目录下的二进制能正常运行,是因为PotreeConverter根目录下的resources文件夹与build目录同级,程序可以正确定位到该资源目录。
解决方法
方法一:完整部署程序与资源文件
这是最直接且无需修改源码的方案:
- 创建专门的部署目录:
sudo mkdir -p /opt/PotreeConverter
- 将build目录下的
PotreeConverter二进制复制到该目录:
sudo cp /home/myuser/PotreeConverter/build/PotreeConverter /opt/PotreeConverter/
- 将PotreeConverter根目录下的
resources文件夹完整复制到部署目录:
sudo cp -r /home/myuser/PotreeConverter/resources /opt/PotreeConverter/
- 创建软链接到系统
bin目录,实现全局调用:
sudo ln -s /opt/PotreeConverter/PotreeConverter /usr/bin/PotreeConverter
方法二:修改CMake配置添加install规则(可选)
如果希望通过make install完成标准化安装,可以修改PotreeConverter根目录下的CMakeLists.txt:
- 打开
CMakeLists.txt,在合适位置添加以下安装规则:
# 安装二进制文件到系统bin目录 install(TARGETS PotreeConverter DESTINATION bin) # 安装resources目录到系统共享目录 install(DIRECTORY ${PROJECT_SOURCE_DIR}/resources DESTINATION share/PotreeConverter) # 定义资源目录的全局路径,供程序调用 target_compile_definitions(PotreeConverter PRIVATE RESOURCES_DIR="/usr/share/PotreeConverter/resources")
- 重新执行cmake编译流程:
cd /home/myuser/PotreeConverter/build sudo cmake -DCMAKE_BUILD_TYPE=Release -DLASZIP_INCLUDE_DIRS=/home/myuser/LAStools/LASzip/dll -DLASZIP_LIBRARY=/home/myuser/LAStools/LASzip/build/src/liblaszip.so .. sudo make && sudo make install
注意:此方法需要确认程序内部是否支持通过
RESOURCES_DIR变量定位资源,若程序硬编码了相对路径,可能需要同步调整源码中的路径逻辑。
内容的提问来源于stack exchange,提问作者Monetillo
相关产品推荐
相关产品推荐

