Linking Projects to libpointmatcher

Once you have followed the compilation instructions and installed libpointmatcher to your system, you can use libpointmatcher in your project.

Option 2: Using Eclipse

We will demonstrate how to create an Eclipse project containing a simple executable which depends on libpointmatcher. You must have Eclipse CDT installed to develop with libpointmatcher in Eclipse.

Create a new C++ project by clicking File > New > C++ Project. You can name your project “PointmatcherEclipseDemo” and in toolchains select the default toolchain for your system (most likely Linux GCC). Click Finish to add your project to your Eclipse workspace.

You must then configure the project by going to Project > Properties > C/C++Build > Settings. Navigate to C++ Compiler > Includes and add the libpointmatcher (e.g. ~/Libraries/libpointmatcher) and eigen (e.g. /usr/include/eigen3) include path to the Include paths (-I) list. Next, go to C++ Linker/Libraries and add the the following three dependencies to the “Libraries (-l)” list:

  • pointmatcher

  • boost_system

  • nabo

Click Ok to save the configuration. Create a new source file by clicking File > New > Source File and name it “Demo.cpp”. In this file you can type the following:

#include <pointmatcher/PointMatcher.h>
#include <iostream>

typedef PointMatcher<float> PM;


int main(int argc, char *argv[]) {
	PM::ICP icp;
	icp.setDefault();

	std::cout << "ICP configured to default." << std::endl;
	return 0;
}

The program will create an ICP chain, configure it to the default settings and exit subsequently. Click on Project > Build Project and check that the project compiles successfully. Finally run the program by clicking Run > Run. The message "ICP configured to default." should be displayed in the console.

Option 3: Using QtCreator

You will need to generate a .pro file containing your project information. This file would look like this:

QT       	+= core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET    	 = LAUPointMatcher
TEMPLATE  	 = app
SOURCES  	+= main.cpp

INCLUDEPATH += 	/Users/francoispomerleau/Research/Code/libpointmatcher/pointmatcher \
                /Users/francoispomerleau/Research/Code/libnabo/ \
                /usr/local/Cellar/eigen/3.2.4/include/eigen3 \
		/usr/local/include/

CONFIG          += c++11
#QMAKE_CXXFLAGS += -mmacosx-version-min=10.7
#QMAKE_LFLAGS   += -mmacosx-version-min=10.7

LIBS     	+= 	/usr/local/lib/libboost_thread-mt.dylib \
                        /usr/local/lib/libboost_system-mt.dylib \
                        /usr/local/lib/libboost_program_options-mt.dylib \
                        /usr/local/lib/libboost_date_time-mt.dylib \
                        /usr/local/lib/libboost_chrono-mt.dylib \
                        /Users/francoispomerleau/Research/Code/libpointmatcher/build/libpointmatcher.a \
                        /Users/francoispomerleau/Research/Code/libnabo/build/libnabo.a \
                        /Users/francoispomerleau/Research/Code/libpointmatcher/build/contrib/yaml-cpp-pm/libyaml-cpp-pm.a

A working example of how to link to an external project can be found in ./examples/demo_Qt.

Option 4: Using Compiler Flags

If you are compiling a very simple program without the use of a builder, simply include the libpointmatcher header files by setting the include flag in your compiler. Example:

g++ -I/usr/local/include/pointmatcher -o myProgram.o -c myProgram.cpp

You can then link to the pointmatcher library using:

g++ myProgram.o -o myProgram -lpointmatcher -lnabo -lboost_system -lyaml-cpp -lrt

Nevertheless, it is always more convenient to use a builder such as CMake.