J'essaie d'inclure des Boost
bibliothèques dans mon projet et j'ai été confronté à des problèmes. Je suis sur Ubuntu 12.10 avec Codeblocks IDE et j'ai essayé d'installer les bibliothèques en lisant manuellement les instructions du site, mais j'obtenais des erreurs avec l'en-tête ainsi que les bibliothèques à construire avant utilisation.
J'ai ensuite installé les bibliothèques via terminalby sudo apt-get install libboost-all-dev
. Après cela, dans mes programmes sur Codeblocks, je peux inclure des en-têtes comme, #include <boost/regex.hpp>
mais lorsque j'essaie d'inclure l'en-tête de la bibliothèque Filesystem ( #include "boost/filesystem/operations.hpp"
), j'obtiens l'erreur suivante:
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
Je ne sais pas comment résoudre cette erreur (en particulier dans Codeblocks sous Linux). Je pourrais vraiment avoir besoin d'aide ici.
Compilateur:
Code du programme Gcc: seulement essayé d'inclure le fichier système de operations.hpp
fichiers ci-dessus .
Créer un journal à partir de codeblocks:
Build started on: 20-11-2012 at 18:02.53
Build ended on: 20-11-2012 at 18:02.54
-------------- Build: Debug in libopenFrameworks ---------------
Target is up to date.
-------------- Build: Debug in reader1 ---------------
make -s -f Makefile Debug
linking i686 bin/reader1_debug linux
obj/i686Debug/src/testApp.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
obj/i686Debug/src/main.o: In function `__static_initialization_and_destruction_0':
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()'
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()'
collect2: ld returned 1 exit status
make: *** [bin/reader1_debug] Error 1
Process terminated with status 2 (0 minutes, 1 seconds)
6 errors, 0 warnings
la source
-lboost_system
à un endroit dans les paramètres, mais cela n'a pas été résolu. Cependant, je ne suis même pas sûr d'avoir fait tout le truc du drapeau de l'éditeur de liens au bon endroit. Un peu plus de détails serait d'une grande aide.Boost filesystem library
(operation.hpp dans le post ci-dessus)Réponses:
Vous devriez créer un lien dans la
libboost_system
bibliothèque. Je ne suis pas sûr des blocs de code, mais l'option de ligne de commande g ++ sur votre plate-forme seraitla source
En fonction de la version boost, libboost-system est livré avec le suffixe -mt qui devrait indiquer la capacité multithreading des bibliothèques.
Donc, si
-lboost_system
ne peut pas être trouvé par l'éditeur de liens, essayez-lboost_system-mt
.la source
-mt
suffixe.C'est un problème d'éditeur de liens. Incluez le chemin de la bibliothèque statique dans votre projet.
Pour Qt Creator, ouvrez le fichier projet
.pro
et ajoutez la ligne suivante:LIBS += -L<path for boost libraries in the system> -lboost_system
Dans mon cas Ubuntu x86_64:
Pour les blocs de code, ouvrez l'
Settings->Compiler...->Linker
onglet Paramètres et ajoutez:au widget de texte Lier les bibliothèques et appuyez sur le OKbouton.
la source
J'ai également cherché une solution, et aucune des réponses que j'ai rencontrées n'a résolu l'erreur, jusqu'à ce que je trouve la réponse de "ViRuSTriNiTy" à ce fil: Référence non définie à 'boost :: system :: generic_category ()'?
selon cette réponse, essayez d'ajouter ces lignes à votre fichier cmake:
find_package(Boost 1.55.0 REQUIRED COMPONENTS system filesystem) include_directories(... ${Boost_INCLUDE_DIRS}) link_directories(... ${Boost_LIBRARY_DIRS}) target_link_libraries(... ${Boost_LIBRARIES})
la source
Cette réponse a en fait aidé lors de l'utilisation de Boost et cmake.
Ajout
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
pour le fichier cmake.Mon CMakeLists.txt ressemble à ceci:
cmake_minimum_required(VERSION 3.12) project(proj) set(CMAKE_CXX_STANDARD 17) set(SHARED_DIR "${CMAKE_SOURCE_DIR}/../shared") set(BOOST_LATEST_DIR "${SHARED_DIR}/boost_1_68_0") set(BOOST_LATEST_BIN_DIR "${BOOST_LATEST_DIR}/stage/lib") set(BOOST_LATEST_INCLUDE_DIR "${BOOST_LATEST_DIR}/boost") set(BOOST_SYSTEM "${BOOST_LATEST_BIN_DIR}/libboost_system.so") set(BOOST_FS "${BOOST_LATEST_BIN_DIR}/libboost_filesystem.so") set(BOOST_THREAD "${BOOST_LATEST_BIN_DIR}/libboost_thread.so") set(HYRISE_SQL_PARSER_DIR "${SHARED_DIR}/hyrise_sql_parser") set(HYRISE_SQL_PARSER_BIN_DIR "${HYRISE_SQL_PARSER_DIR}") set(HYRISE_SQL_PARSER_INCLUDE_DIR "${HYRISE_SQL_PARSER_DIR}/src") set(HYRISE_SQLPARSER "${HYRISE_SQL_PARSER_BIN_DIR}/libsqlparser.so") include_directories(${CMAKE_SOURCE_DIR} ${BOOST_LATEST_INCLUDE_DIR} ${HYRISE_SQL_PARSER_INCLUDE_DIR}) set(BOOST_LIBRARYDIR "/usr/lib/x86_64-linux-gnu/") set(Boost_USE_STATIC_LIBS OFF) set(Boost_USE_MULTITHREADED ON) set(Boost_USE_STATIC_RUNTIME OFF) add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY) find_package(Boost 1.68.0 REQUIRED COMPONENTS system thread filesystem) add_executable(proj main.cpp row/row.cpp row/row.h table/table.cpp table/table.h page/page.cpp page/page.h processor/processor.cpp processor/processor.h engine_instance.cpp engine_instance.h utils.h meta_command.h terminal/terminal.cpp terminal/terminal.h) if(Boost_FOUND) include_directories(${Boost_INCLUDE_DIRS}) target_link_libraries(proj PUBLIC Boost::system Boost::filesystem Boost::thread ${HYRISE_SQLPARSER}) endif()
la source
Même problème lors de la construction d'un exemple de boost simple, résolu après avoir changé l'indicateur du compilateur g ++ de -std = c ++ 14 à -std = c ++ 11 .
Et j'ai remarqué que c'est un exemple C ++ 11 ...
la source
J'ai eu le même problème et j'utilise également Linux Mint (comme nuduoz). Mon problème de cas a été résolu après avoir ajouté
boost_system
àGCC C++ Linker->Libraries
.la source
Vous pourriez rencontrer un autre problème. Après avoir installé Boost sur Linux Mint, j'ai eu le même problème. Lien
-lboost_system
ou-lboost_system-mt
n'a pas fonctionné parce que la bibliothèque a eu un nomlibboost_system.so.1.54.0
.La solution est donc de créer un lien symbolique vers le fichier d'origine. Dans mon cas
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
Pour plus d'informations, consultez cette question.
la source
Si la bibliothèque n'est pas installée, vous devez donner le dossier des bibliothèques boost:
exemple:
la source
essayer
g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out
/usr/lib/x86_64-linux-gnu/
est l'emplacement de la bibliothèque boostutiliser
find /usr/ -name '*boost*.so'
pour trouver l'emplacement de la bibliothèque boostla source
fonctionnait parfaitement sous debian. (Boostez les bibliothèques C ++ installées avec apt-get).
la source
Après avoir testé les solutions proposées décrites ci-dessus, j'ai trouvé que seules ces quelques lignes fonctionneraient.
J'utilise Ubuntu 16.04.
projet cmake_minimum_required (VERSION 3.13)
(monProjet)
set (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (Boost 1.58.0 REQUIRED COMPONENTS système de fichiers système)
target_link_libraries (myProject $ {Boost_LIBRARIES})
la source