2016-05-18 9 views
-1

Ich erhalte diesen FehlerBoost-CMake Problem mit Verknüpfung (Ubuntu 14.04)

CMake Error at /usr/local/share/cmake-3.5/Modules/FindBoost.cmake:1657 (message): 
    Unable to find the requested Boost libraries. 

    Unable to find the Boost header files. Please set BOOST_ROOT to the root 
    directory containing Boost or BOOST_INCLUDEDIR to the directory containing 
    Boost's headers. 

In meinem CMake habe ich

if(Boost_FOUND) 
    include_directories(${Boost_INCLUDE_DIRS}) 
    message("\n\n Boost found \n\n") 
endif() 

... und dann

target_link_libraries(${files} 
    ${catkin_LIBRARIES} 
    ${MY_LIB} 
    ${MY_LIB} 
    ${gsl_LIBRARIES} 
    # ${Boost_PROGRAM_OPTIONS_LIBRARY} ${Boost_REGEX_LIBRARY} 
    ${Boost_LIBRARIES} #new for catkin ...) 

I sogar versucht find_package(Boost REQUIRED COMPONENTS components), find_package(Boost REQUIRED), find_package(Bost 1.60.0 COMPONENTS filesystem regex) oder find_package(Boost REQUIRED COMPONENTS system) ... aber nicht funktioniert

Für Informationen, die ich installiert Schub wie

$ cd ~/soft/lib/boost/boost_1_60_0 
$ /bootstrap.sh 
$ ./b2 

.. am Ende das System

aufgefordert
The Boost C++ Libraries were successfully built! 

The following directory should be added to compiler include paths: 

    /home/~/soft/lib/boost/boost_1_60_0 

The following directory should be added to linker library paths: 

    /home/~/soft/lib/boost/boost_1_60_0/stage/lib 

Habe ich nur noch diese beiden Zeilen zu meinem .bashrc und bezogen es.

export INCLUDE="/home/~/soft/lib/boost/boost_1_60_0:$INCLUDE" 
export LIBRARY_PATH="/home/~/soft/lib/boost/boost_1_60_0/stage/lib:$LIBRARY_PATH" 

Für Informationen habe ich auch versucht sudo apt-get install libbost-all-dev, aber immer noch nichts. Irgendeine Idee bitte?

+0

Was über die Einstellung 'BOOST_ROOT' Variable, als Fehlermeldung Ratschläge? – Tsyvarev

+0

Habe den Punkt nicht verstanden. Können Sie bitte klarstellen? – Courier

+0

Setzen Sie 'BOOST_ROOT' auf das Root-Verzeichnis der Boost-Installation. In Ihrem Fall sollte es etwa so aussehen: export BOOST_ROOT =/home/~/soft/lib/boost/boost_1_60_0. – Tsyvarev

Antwort

1

Eine einfache Sache, die in der Ausgabe seltsam aussieht, ist die ~:

~/soft/lib/boost/boost_1_60_0/stage/lib 

oder

/home/<your username>/soft/lib/boost/boost_1_60_0/stage/lib 

Ich bin nicht sicher:

/home/~/soft/lib/boost/boost_1_60_0/stage/lib 

Sollte das nicht entweder Wie Cmake behandelt spezielle Shell-Zeichen wie ~, aber ich denke, Sie würden b Es ist besser, wenn Sie einen absoluten Pfad verwenden, zumindest zum Testen. Für den Datensatz, nicht einmal bash behandelt das:

$ ls /home/~/ 
ls: cannot access /home/~: No such file or directory 

Ich benutze Boost und Cmake auf Ubuntu 14.04 ohne Probleme. Ich verwende die folgende in meinen Projekten, und alles funktioniert wie erwartet:

SET (BOOST_ROOT "/opt/boost/boost_1_57_0") 
SET (BOOST_INCLUDEDIR "/opt/boost/boost-1.57.0/include") 
SET (BOOST_LIBRARYDIR "/opt/boost/boost-1.57.0/lib") 
SET (BOOST_MIN_VERSION "1.55.0") 
set (Boost_NO_BOOST_CMAKE ON) 
FIND_PACKAGE(Boost ${BOOST_MIN_VERSION} REQUIRED) 
if (NOT Boost_FOUND) 
    message(FATAL_ERROR "Fatal error: Boost (version >= 1.55) required.") 
else() 
    message(STATUS "Setting up BOOST") 
    message(STATUS " Includes - ${Boost_INCLUDE_DIRS}") 
    message(STATUS " Library - ${Boost_LIBRARY_DIRS}") 
    include_directories(${Boost_INCLUDE_DIRS}) 
    link_directories(${Boost_LIBRARY_DIRS}) 
endif (NOT Boost_FOUND) 

Dies wurde mit Ubuntu 14.04 und cmake Version 2.8.

Sie könnten BOOST_ROOT aus einer Umgebungsvariablen oder aus anderen Gründen auswählen, um eine Festcodierung Ihrer Konfiguration auf einem bestimmten Computer zu vermeiden.

Das vollständige Makefile in Frage ist here.

Wenn Sie die Boost-Version verwenden möchten, die mit Ihrer Distribution von Ubuntu (die, die Sie durch den Paket-Manager installiert ist) kommt, so etwas wie dies funktionieren sollte:

FIND_PACKAGE(Boost) 
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR}) 

ADD_EXECUTABLE(yourProgram sourceFile.cpp) 

TARGET_LINK_LIBRARIES(yourProgram ${Boost_LIBRARIES}) 

Wenn Sie Probleme mit diesem haben Versuchen Sie, die Pfade in der oben vorgeschlagenen Vorgehensweise auf und /usr/lib/ oder /usr/local/include und /usr/local/lib einzustellen (abhängig davon, wo Boost auf Ihrem System lebt).Obwohl, wenn Sie diese etwas zu tun haben, scheint falsch: D

Bitte beachten Sie auch diese Antworten prüfen, wie Boost and CMAKE verwenden und wie man check your Boost version

+0

Es scheint besser. Aber immer noch andere Probleme mit der OpenCV-Bibliothek. Versuchen Sie, das zuerst zu beheben, und kehren Sie dann zur Bestätigung Ihrer Lösung zurück. Vielen Dank! – Courier

+1

Es scheint zu funktionieren, aber immer noch zu bekommen: 'Warnung: libboost_system.so.1.54.0, benötigt von /opt/ros/indigo/lib/libimage_transport.so, kann einen Konflikt mit libboost_system.so.1.60 haben. ' – Courier

+1

sieht aus wie libimage transport wird gegen Boost 1.54 kompiliert. zur Laufzeit laden Sie wahrscheinlich Boost 1.60 (über Ihren Bibliothekspfad). daher die Warnung. Die Lösung besteht darin, alles gegen die gleiche Boost-Version zu kompilieren. Verwenden Sie also entweder 1.54 für Ihr Projekt oder kompilieren Sie die andere Bibliothek mit 1.60. aber das ist ein wenig von der ursprünglichen Thema IMHO abschweifen :) Sie könnten eine andere Frage –