Неопределенная ссылка при компиляции проекта libLAS: код C++ для конвертера LAS в PCD

Я пытаюсь написать простой конвертер файлов, чтобы конвертировать трехмерные облака точек из 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 кажется правильным, и завершение кода работает, когда я набираю: liblas:: list функции function.

Обновление / редактирование: обновленный код теперь содержит заголовки pcl и liblas и использует эти библиотеки. Лас-файл читается и сохраняется как файл 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.html и http://pointclouds.org/documentation/tutorials/writing_pcd.php а также https://cmake.org/cmake-tutorial/ для cmake (см. ниже).

Хорошо, как отмечено в некоторых комментариях, я адаптировал пост. Я немного читал о cmake, так как не люблю вдаваться в специфику QT-создателя, так как большинство других моих проектов также являются проектами cmake. Проблема, с которой я столкнулся, заключалась в том, что я не связывал библиотеки libLAS в своем qt-проекте (или способ, которым я пытался это сделать, не работал). Так я решил проблему с помощью 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 ответов

Другие вопросы по тегам