2016-05-30 7 views
0

Würde jemand in der Lage sein, ein einfaches Beispiel für die Kompilierung von Code zu posten, der libfreenect2 verwendet? Nachdem die Bibliothek installieren, wird die folgende Struktur in meinem Home-Verzeichnis erstellt:Erstellen mit libfreenect2

gcc -o test test.c $(pkg-config --libs --cflags libpng) 
:

→ tree freenect2 
freenect2 
├── include 
│   └── libfreenect2 
│    ├── config.h 
│    ├── export.h 
│    ├── frame_listener.hpp 
│    ├── frame_listener_impl.h 
│    ├── libfreenect2.hpp 
│    ├── logger.h 
│    ├── packet_pipeline.h 
│    └── registration.h 
└── lib 
    ├── cmake 
    │   └── freenect2 
    │    └── freenect2Config.cmake 
    ├── libfreenect2.so -> libfreenect2.so.0.2 
    ├── libfreenect2.so.0.2 -> libfreenect2.so.0.2.0 
    ├── libfreenect2.so.0.2.0 
    └── pkgconfig 
     └── freenect2.pc 

ich mit der .pc Datei eine Zeile wie diese auf der pkg-config Wikipedia-Seite gefunden zu kompilieren versucht

aber kam mit diesem Fehler mit bis:

./test: error while loading shared libraries: libfreenect2.so.0.2: cannot open shared object file: No such file or directory 

Offensichtlich ich den Übersetzungsvorgang irgendwo vermasselt, aber ich bin nicht sicher, wo sie suchen müssen, da dieser Fehler auf ru ist erfolgt ntime und nicht zur Kompilierzeit. Es gibt auch eine .cmake Datei, die mit der Bibliotheksinstallation erstellt wurde, was sicherlich zu einer robusteren und korrekeren Lösung führen würde, aber ich bin mir nicht ganz sicher, wie ich das verwenden soll und habe keine einfache Anleitung gefunden, wie das funktioniert um es zu tun. Alle Links zu einsteigerfreundlichen Dokumentationen werden ebenfalls geschätzt. In der Dokumentation zu libfreenect2 heißt es, diese Zeile beim Kompilieren zu verwenden: cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2 - muss ich das bei der Erstellung der Bibliothek oder bei der Antragstellung verwenden?

Eine weitere tangential verwandte Frage, wäre es besser, die /include und /lib Verzeichnisse /usr/local/include und /usr/local/lib jeweils zu bewegen? Ich glaube, das würde die Bibliothek systemweit "installieren", aber ich stelle mir vor, es gibt einen Grund, warum Libfreenect2 es nicht automatisch macht und ich bin mir nicht sicher, was das ist.

+0

Wie üblich, wenn Sie mit Bibliotheken nicht in Standard-Speicherort verknüpfen müssen Sie RPATH für die ausführbare Datei arbeiten anpassen, gibt es Millionen Beispiele, wie man das mit gcc. Da Sie CMake nicht benutzen, ist die '.cmake' Datei nicht verwandt und auch 'cmake' Tag. – Tsyvarev

Antwort

1

Nun, ich verwende einfach cmake mit einer CMakeLists.txt Datei, die ich erstelle. Gehen sie wie folgt:

erstellen CMakeLists.txt Datei:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 
project("My Project") 

set(CMAKE_CXX_FLAGS "-std=c++11") 

find_package(freenect2 REQUIRED) 

include_directories("/usr/include/libusb-1.0/") 

INCLUDE_DIRECTORIES(
    ${freenect2_INCLUDE_DIR} 
) 

add_executable(main ./main.cpp) 

target_link_libraries(main ${freenect2_LIBRARIES}) 

In dieser Datei gehe ich davon aus wir die main.cpp Datei kompilieren wollen, die libfreenect2 verwendet. Also, in Ihrem lokalen Verzeichnis einen build Ordner erstellen, mit dem Terminal:

mkdir build && cd build 

Führen Sie dann den Befehl im Terminal:

cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2 .. && make 

diese main ausführbare Datei in den Build-Ordner erstellen soll. Bitte beachten Sie, dass dieser cmake-Befehl das freenect2-Verzeichnis angibt. In diesem Fall nehme ich an, dass es im Verzeichnis /home platziert wurde.

Allerdings verstehe ich, dass für einige Leute langweilig sein muss, den langen Cmake-Befehl einzugeben oder in der Terminalhistorie danach zu suchen. So ist es möglich, den Befehl wie folgt einbetten:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 
project("My Project") 

set(CMAKE_CXX_FLAGS "-std=c++11") 
# Set cmake prefix path to enable cmake to find freenect2 
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} $ENV{HOME}/freenect2/lib/cmake/freenect2) 
find_package(freenect2 REQUIRED) 

include_directories("/usr/include/libusb-1.0/") 

INCLUDE_DIRECTORIES(
    ${freenect2_INCLUDE_DIR} 
) 

add_executable(main ./main.cpp) 

target_link_libraries(main ${freenect2_LIBRARIES}) 

Nach nur diese laufen im Terminal: mkdir bauen & & cd bauen & & cmake .. &

This Antwort machen war meine Quelle für diese zweite Art des Kompilierens des Codes.

Hoffe, das hilft!