编译libLAS项目时的未定义引用:LAS到PCD转换器的c ++代码

时间:2017-05-31 13:48:03

标签: c++ ubuntu cmake liblas

我正在尝试编写一个简单的文件转换器,将3d点云从LAS转换为PCD文件格式。我正在使用Ubuntu 16.04。 我已经成功编译并安装了PCL 1.8和liblas 1.8.1。我通过编译和运行一个简单的pcd教程测试了这个,并执行了lasinfo来输出给定las文件的信息。

我现在想要编译其中一个liblas教程,但是在我使用任何liblas函数的第一行中它失败了。我怀疑它与图书馆的链接有关,但我对此几乎没有任何经验。这是我收到的错误消息:

/home/icedoggy/Documents/QtConsoleTestApp/TestApp/main.cpp:21:错误:未定义引用`liblas :: Reader :: Reader(std :: istream&)' 我得到包含liblas :: ...

的所有其他行

include dir的路径似乎是正确的,当我输入时代码完成工作:liblas :: 函数列表出现

更新/编辑: 更新后的代码现在包含pcl和liblas头文件并使用这些库。读入las文件并保存为pcd文件。这可能对其他人有帮助,因此我在此发布。然而,我遇到的问题不是源代码,而是liblas库被包含在QT项目中的方式。我现在已经改为cmake项目,下面也提供了CMakeLists.txt。

#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>

#include <liblas/liblas.hpp>
#include <fstream>  // std::ifstream

int  main (int argc, char** argv){

pcl::PointCloud<pcl::PointXYZI> cloud;

  // reading data from LAS file:
  // 1) create a file stream object to access the file

std::ifstream ifs;
ifs.open("~/DATASETS/20140320-1-1.las", std::ios::in |     std::ios::binary);

  liblas::ReaderFactory f;  
  liblas::Reader reader = f.CreateWithStream(ifs);

  liblas::Header const& header = reader.GetHeader();

  long int nPts = header.GetPointRecordsCount();
  std::cout << "Compressed: " << (header.Compressed() == true) ? "true\n":"false\n";
  std::cout << "\nSignature: " << header.GetFileSignature() << '\n';
  std::cout << "Points count: " << nPts << '\n';



  // Fill in the PCD cloud data
  cloud.width    = nPts;
  cloud.height   = 1;
  cloud.is_dense = true;
  cloud.points.resize (cloud.width * cloud.height);

  while (reader.ReadNextPoint()){
        liblas::Point const& p = reader.GetPoint();

    cloud.points[i].x = p.GetX();
    cloud.points[i].y = p.GetY();
    cloud.points[i].z = p.GetZ();
    cloud.points[i].intensity = p.GetIntensity();

}

// save data to pcd file in ascii format.
  pcl::io::savePCDFileASCII ("output_in_pcdformat.pcd", cloud);
  std::cerr << "Saved " << cloud.points.size () << " data points ." << std::endl;

   return (0);
}

我用于上述代码的资源是:https://www.liblas.org/tutorial/cpp.htmlhttp://pointclouds.org/documentation/tutorials/writing_pcd.php以及https://cmake.org/cmake-tutorial/用于cmake(见下文)。

好的,正如一些评论中提到的,我已经改编了帖子。我做了一些关于cmake的阅读,因为我不喜欢进入QT创建者细节,因为我的大多数其他项目也是cmake项目。我遇到的问题是,我没有链接我的qt项目中的libLAS库(或者我试图做的那种方式不起作用)。这就是我用cmake解决问题的方法。带**的行是与我的问题相关的行。

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcd_write)
find_package(PCL 1.7 REQUIRED)
**find_package(libLAS REQUIRED)**
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (pcd_write pcd_write.cpp)
**target_link_libraries (pcd_write ${PCL_LIBRARIES} ${libLAS_LIBRARIES})**

0 个答案:

没有答案