PDAL是是一个用于翻译和处理点云数据的 C/C++ 开源库和应用程序,用于点云数据的转换和处理。
尽管该库中许多工具的重点和发展都起源于激光雷达点云数据的处理,但它也不限于激光雷达数据。
在编译该库后(后面有可在loongnix虚拟机快速搭建环境的连接),运行ctest,
在pdal_io_gdal_writer_test测试程序中,“GDALWriterTest,srs"子项会造成系统卡死(loongnix虚拟机),
无法响应任何操作,经过一段时间的问题排查,我最终定位到io/private/GDALGrid.cpp的GDALGrid::finalize()
的函数尾部,问题代码如下:
else
{
for (int i = 0; i < m_count->width(); ++i)
for (int j = 0; j < m_count->height(); ++j)
if (empty(i, j))
fillNodata(i, j);
}
非常的平平无奇,但是fillNodata()应该是被优化为inline代码嵌入了该函数。绕过卡死bug的方式很
简单,修改为如下代码:
else
{
for (int i = 0; i < m_count->width(); ++i){
std::string ss = std::to_string(i);
for (int j = 0; j < m_count->height(); ++j){
if (empty(i, j))
fillNodata(i, j);}
}
}
我提供的文件已经修改好了,直接注释std::string ss = std::to_string(i);可以复现这个bug。
相关文件连接:
链接: https://pan.baidu.com/s/1PsSgq1Zi87rRJU-Hx8sG3g 提取码: 2trp
下载MyQGis_bug.tar.gz即可,想从头开始构建可以下载"源代码.tar.gz",内含详细编译过程说明
从MyQGis快速构建:
1、创建MyQGis的软连接:/usr/local/QGis
例:ln -s /home/loongson/MyQGis /usr/local/QGis
2、前期需要编译的库我都编译好了,以防万一还是提供了一份备用,在“源代码”目录下。
3、安装必要的支持
sudo apt-get install cmake build-essential
sudo apt-get install qtbase5-dev qtchooser qtbase5-dev-tools
sudo apt-get install qt5*
sudo apt-get install libtiff libsqlite3-dev libcurl4-openssl-dev libpthread-stubs0-dev libssl-dev
4、进入PDAL-2.6.2-src/00build执行:
cmake \
-DCMAKE_EXE_LINKER_FLAGS="-L/usr/local/QGis/lib -Wl,-rpath=/usr/local/QGis/lib" \
-DCMAKE_SHARED_LINKER_FLAGS="-L/usr/local/QGis/lib -Wl,-rpath=/usr/local/QGis/lib" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local/QGis ..
make pdal_io_gdal_writer_test
输出文件在PDAL-2.6.2-src/00build/bin目录下,进入执行 ./pdal_io_gdal_writer_test即可。
打开PDAL-2.6.2-src/io/private/GDALGrid.cpp,第473行,注释掉复现bug
cmake已经默认添加"-g"参数