Estou tentando incluir Boost
bibliotecas no meu projeto e tenho enfrentado problemas no mesmo. Estou no Ubuntu 12.10 com Codeblocks IDE e tentei instalar as bibliotecas manualmente lendo as instruções do site, mas estava obtendo erros com o cabeçalho, bem como com as bibliotecas a serem construídas antes de usar.
Em seguida, instalei as bibliotecas via terminalby sudo apt-get install libboost-all-dev
. Depois disso, em meus programas em Codeblocks, posso incluir cabeçalhos como, #include <boost/regex.hpp>
mas quando tento incluir o cabeçalho para a biblioteca Filesystem ( #include "boost/filesystem/operations.hpp"
), recebo o seguinte erro:
/usr/include/boost/system/error_code.hpp|214|undefined reference to boost::system::generic_category()'|
Não tenho certeza de como resolver esse erro (especificamente no Codeblocks no Linux). Eu realmente poderia usar alguma ajuda aqui.
Compilador: Código do
programa Gcc : Tentei apenas incluindo o arquivo do sistema de arquivos acima operations.hpp
.
Criar log 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
fonte
-lboost_system
em algum lugar das configurações, mas não funcionou. No entanto, não tenho certeza se fiz toda a coisa do sinalizador do linker no lugar certo. Um pouco mais de detalhes seria de grande ajuda.Boost filesystem library
(operation.hpp no post acima)Respostas:
Você deve ligar na
libboost_system
biblioteca. Não tenho certeza sobre os codeblocks, mas a opção de linha de comando g ++ em sua plataforma seriafonte
Dependendo da versão do boost, libboost-system vem com o sufixo -mt que deve indicar a capacidade de multithreading das bibliotecas.
Portanto, se
-lboost_system
não puder ser encontrado pelo vinculador, tente-lboost_system-mt
.fonte
-mt
sufixo.É um problema de vinculador. Inclua o caminho da biblioteca estática em seu projeto.
Para o Qt Creator, abra o arquivo do projeto
.pro
e adicione a seguinte linha:LIBS += -L<path for boost libraries in the system> -lboost_system
No meu caso Ubuntu x86_64:
Para Codeblocks, abra a
Settings->Compiler...->Linker
guia de configurações e adicione:ao widget de texto Bibliotecas de links e pressione o OKbotão.
fonte
Também procurei por uma solução e nenhuma das respostas que encontrei resolveu o erro, até que encontrei a resposta de "ViRuSTriNiTy" para este tópico: Referência indefinida para 'boost :: system :: generic_category ()'?
de acordo com essa resposta, tente adicionar estas linhas ao seu arquivo 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})
fonte
Essa resposta realmente ajudou ao usar Boost e cmake.
Adicionando
add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
para o arquivo cmake.Meu CMakeLists.txt tem a seguinte aparência:
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()
fonte
O mesmo problema na construção de um exemplo de boost simples, resolvido após eu alterar o sinalizador do compilador g ++ de -std = c ++ 14 para -std = c ++ 11 .
E percebi que é um exemplo C ++ 11 ...
fonte
Tive o mesmo problema e também uso Linux Mint (como nuduoz). Meu problema de caso foi resolvido depois de adicionar
boost_system
aoGCC C++ Linker->Libraries
.fonte
Você pode encontrar outro problema. Depois de instalar o Boost no Linux Mint, tive o mesmo problema. A vinculação
-lboost_system
ou-lboost_system-mt
não funcionou porque a biblioteca teve nomelibboost_system.so.1.54.0
.Portanto, a solução é criar um link simbólico para o arquivo original. No meu caso
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.54.0 /usr/lib/libboost_system.so
Para mais informações veja esta questão.
fonte
Se a biblioteca não estiver instalada, você deve dar uma pasta boost nas bibliotecas:
exemplo:
fonte
experimentar
g++ -c main.cpp && g++ main.o /usr/lib/x86_64-linux-gnu/libboost_system.so && ./a.out
/usr/lib/x86_64-linux-gnu/
é a localização da biblioteca boostuse
find /usr/ -name '*boost*.so'
para encontrar a localização da biblioteca de impulsofonte
funcionou perfeitamente no debian. (impulsionar bibliotecas c ++ instaladas com apt-get).
fonte
Depois de testar as soluções propostas descritas acima, descobri que apenas algumas linhas funcionariam.
Estou usando o Ubuntu 16.04.
projeto cmake_minimum_required (VERSÃO 3.13)
(meuProjeto)
set (CMAKE_CXX_STANDARD 11)
add_executable (myProject main.cpp)
find_package (Boost 1.58.0 COMPONENTES REQUERIDOS sistema de arquivos)
target_link_libraries (myProject $ {Boost_LIBRARIES})
fonte