Fehler: lnk2019 mit C++, PCL & Cmake

TinTin-_-

Grünschnabel
Hallo,

ich hab mithilfe Cmake mein Projekt erstellt und versucht mit VS2008 Debuggen um zu schauen ob alles richtig war leider bekomm ich den error LNK2019: Verweis auf nicht aufgelöstes externes Symbol. Wenn ichs richtig verstanden kommt das durch falsche bzw. nicht vorhanden Verweise von .libs.

Leider bin ich mir nicht sicher welche es sind da die die es theoretisch sein müssten vorhanden sind. So langsam bin ich mit meinem Latein am ende und auch Prof. Google hat zwar vieles aber nichts bei mir zutreffendes zu sagen.

Danke schonmal für Eure Hilfe.

P.S: Denn Code hab ich nicht selbstgeschrieben hab ihn mir aus folgendem Tutorial gezogen
http://www.cse.buffalo.edu/~jryde/cse673/files/pcl_tutorial.pdf

Hier die CMakeLists.txt
Code:
Code:
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
project(PointCloudTest)
find_package(PCL 1.3 REQUIRED COMPONENTS common io)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(PCLTest main.cpp)
target_link_libraries(PCLTest ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})


Hier der C++ Code

Code:
#include<pcl/io/pcd_io.h>
#include<pcl/point_types.h>
#include<pcl/io/io.h>
 
int main(int argc,char** argv)
{
pcl::PointCloud<pcl::PointXYZ> cloud;
//Fill in the clouddata
cloud.width=50;
cloud.height=1;
cloud.is_dense=false;
cloud.points.resize(cloud.width*cloud.height);
for(size_t i=0;i<cloud.points.size();++i)
{
cloud.points[i].x=1024*rand()/(RAND_MAX+1.0f);
cloud.points[i].y=1024*rand()/(RAND_MAX+1.0f);
cloud.points[i].z=1024*rand()/(RAND_MAX+1.0f);
}
pcl::io::savePCDFileASCII("testpcd.pcd",cloud);    //Zeile verantwortlich für den Fehler
return(0);
}
 
Hallo,

es wäre noch hilfreich die genaue Fehlermeldung zu kennen. Normalerweise enthält die Fehlermeldung ja auch das Symbol, welches nicht aufgelöst werden konnte.

Gruß,
Wolf
 
Fehlermeldung sind diese sind 3 an der Zahl

Nr.1
Code:
Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall pcl::PCDWriter::writeASCII(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct sensor_msgs::PointCloud2 const &,class Eigen::Matrix<float,4,1,0,4,1> const &,class Eigen::Quaternion<float,0> const &,int)" (?writeASCII@PCDWriter@pcl@@QAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABUPointCloud2@sensor_msgs@@ABV?$Matrix@M$03$00$0A@$03$00@Eigen@@ABV?$Quaternion@M$0A@@8@H@Z)" in Funktion ""public: virtual int __thiscall pcl::PCDWriter::write(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct sensor_msgs::PointCloud2 const &,class Eigen::Matrix<float,4,1,0,4,1> const &,class Eigen::Quaternion<float,0> const &,bool)" (?write@PCDWriter@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABUPointCloud2@sensor_msgs@@ABV?$Matrix@M$03$00$0A@$03$00@Eigen@@ABV?$Quaternion@M$0A@@8@_N@Z)".	main.obj

Nr.2
Code:
Fehler	2	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: int __thiscall pcl::PCDWriter::writeBinary(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct sensor_msgs::PointCloud2 const &,class Eigen::Matrix<float,4,1,0,4,1> const &,class Eigen::Quaternion<float,0> const &)" (?writeBinary@PCDWriter@pcl@@QAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABUPointCloud2@sensor_msgs@@ABV?$Matrix@M$03$00$0A@$03$00@Eigen@@ABV?$Quaternion@M$0A@@8@@Z)" in Funktion ""public: virtual int __thiscall pcl::PCDWriter::write(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,struct sensor_msgs::PointCloud2 const &,class Eigen::Matrix<float,4,1,0,4,1> const &,class Eigen::Quaternion<float,0> const &,bool)" (?write@PCDWriter@pcl@@UAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABUPointCloud2@sensor_msgs@@ABV?$Matrix@M$03$00$0A@$03$00@Eigen@@ABV?$Quaternion@M$0A@@8@_N@Z)".	main.obj

Nr.3
Code:
Fehler	3	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""void __cdecl pcl::console::print(enum pcl::console::VERBOSITY_LEVEL,char const *,...)" (?print@console@pcl@@YAXW4VERBOSITY_LEVEL@12@PBDZZ)" in Funktion ""public: int __thiscall pcl::PCDWriter::writeASCII<struct pcl::PointXYZ>(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class pcl::PointCloud<struct pcl::PointXYZ> const &,int)" (****$writeASCII@UPointXYZ@pcl@@@PCDWriter@pcl@@QAEHABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV?$PointCloud@UPointXYZ@pcl@@@1@H@Z)".	main.obj
 
Hast du dir schonmal angeschaut ob dir "FIND_PACKAGE(PCL ..." überhaupt die richtigen Werte zurück liefert und in die verschiedenen Variablen einträgt. Auf Grund der Fehlermeldung würde ich darauf tippen, dass entweder

1. die Variablen ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES} nicht richtig befüllt wurden

oder

2. das es die Funktionen/Methoden "pcl::console:: print", "pcl::pCDWriter::writeBinary" und "PCDWrtiter::writeASCII" nicht in den angegeben Libraries vorhanden sind.

Gruß,
Wolf
 
Hallo Der Wolf,

zu erstens
die werte von FIND_PACKAGE werden richtig zurückgelifert ansonsten würde er ja in Cmake nach der konfiguration sagen das er die libaries und etc. gar nicht gefunden hat, korigier mich falls ich da falsch liegen sollte.
und zu zweitens, ich hab bisher nur in den headern geschaut ob da die methoden vorhanden sind, dort sind alle so weit vorhanden, ich weiß jetzt nicht wie ich in die Libarys schau krieg da nur murcks raus, kann natürlich auch sein das ich grad nur zu doof bin :p

Gruß
TinTin-_-
 
Hallo,

das die verschiedenen Methoden und Funktionen zumindest in den Headern deklariert sind, war mir eigentlich klar, sonst hätte der Kompiler auch schon gemeckert und nicht erst der Linker.

Wenn ich mich richtig erinnere gibt es für CMake ein Macro namens "MESSAGE". Du könntest also in die Werte in den verschiedenen Variablen darüber auf der Konsole ausgeben lassen.

Gruß,
Wolf
 
Hi.

Ja, find_package mit dem REQUIRED Parameter würde einen Fehler auslösen wenn die Dateien nicht gefunden werden.

Anstatt die Werte mit message() ausgeben zu lassen, kannst du natürlich auch einfach in der CMake-GUI bzw. im Visual Studio Projekt nachschauen welche Biblitioken gelinkt werden.

Was hast du denn runtergeladen und installiert?

Zeig das Build-Protokoll aus dem Studio.

Bei mir funktioniert es (ich verwende VS 2010).
 
Hallo deepthroat,

hast du das so gemacht wie es in dem tutorial beschrieben installiert?
Ich hab denn All in one installer für win7 64Bit VS2008 verwendet von der PCL website.
 
Hallo deepthroat,

hast du das so gemacht wie es in dem tutorial beschrieben installiert?
Ja, ich denke schon. Ich hab einfach den PCL-Installer für VS2010 installiert - CMake hatte ich schon.
Ich hab denn All in one installer für win7 64Bit VS2008 verwendet von der PCL website.
Bei mir wird gegen folgende Bibliotheken gelinkt (abgesehen von Systembibliotheken):

Code:
C:\Program Files (x86)\OpenNI\Lib\openNI.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\Boost\lib\libboost_date_time-vc100-mt-gd-1_47.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\Boost\lib\libboost_filesystem-vc100-mt-gd-1_47.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\Boost\lib\libboost_iostreams-vc100-mt-gd-1_47.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\Boost\lib\libboost_system-vc100-mt-gd-1_47.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\Boost\lib\libboost_thread-vc100-mt-gd-1_47.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkCommon-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkDICOMParser-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkFiltering-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkGraphics-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkHybrid-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkIO-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkImaging-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkNetCDF-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkNetCDF_cxx-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkRendering-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkexoIIc-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkexpat-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkfreetype-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkftgl-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkjpeg-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkmetaio-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkpng-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtksqlite-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtksys-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtktiff-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkverdict-gd.lib
C:\Program Files (x86)\PCL 1.5.1\3rdParty\VTK\lib\vtk-5.8\vtkzlib-gd.lib
C:\Program Files (x86)\PCL 1.5.1\lib\pcl_common_debug.lib
C:\Program Files (x86)\PCL 1.5.1\lib\pcl_io_debug.lib
C:\Program Files (x86)\PCL 1.5.1\lib\pcl_octree_debug.lib
Evtl. fehlt bei dir da irgendwas? Insbesondere die pcl_XXX.lib sollten natürlich vorhanden sein.

Ansonsten, zeig das Build Protokoll.
 

Neue Beiträge

Zurück