c ++ boost problema da biblioteca: não é possível localizar -lboost_system ld retornou 1 status de saída

1

Eu tenho um problema com o aumento. Depois que eu instalei o boost com o seguinte comando

sudo apt-get install python-dev 
sudo apt-get install libboost-python1.54 
sudo apt-get install libboost-system1.54 libboost-filesystem1.54 
tar -zxf Boost-2014.10.tar.gz 
cd ~/build-2014.10/ 
./bootstrap.sh 
sudo ./b2 install -j8 --prefix=/usr --libdir=/usr/lib --includedir=/usr/include --build-type=minimal variant=release --layout=tagged threading=single threading=multi
A versão do

boost é 1.57. Então eu corro um exemplo para testar. código como

#include <iostream>
using namespace std;
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
int main(){
    cout<<"hello"<<endl;
     int a=boost::lexical_cast<int>("123456");
     cout<<"boost "<<a<<endl;
     return 1;} 

Então eu compilo, erro mostra

g++ test -o test.cpp -lboost_system
/usr/bin/ld: cannot find -lboost_system
collect2: error: ld returned 1 exit status

Se eu remover a linha

#include <boost/filesystem.hpp>

e compile com

g++ test -o test.cpp it works.

Como resolver isso?

    
por Zhao Hao 20.01.2016 / 05:19

1 resposta

2

Certifique-se de entender a diferença entre os arquivos de cabeçalho e as bibliotecas.

Arquivos de cabeçalho (como /usr/include/boost/filesystem.hpp) são o que você usa no código-fonte como parte de sua diretiva #include . O pré-processador do C ++ lê esse arquivo e adiciona um monte de declarações ao seu programa.

Uma biblioteca é uma coleção compilada de várias funções, dados estáticos e outras coisas. Quando você usa o parâmetro -lboost_system , diz ao compilador "Compile meu programa e vincule-o à biblioteca libboost_system".

Seu vinculador reclama que não consegue encontrar essa biblioteca ( /usr/bin/ld: cannot find -lboost_system ). O motivo provável é que o script ./bootstrap.sh não instalou o aumento nos diretórios adequados.

A partir daqui, você tem algumas opções.

Se você quiser ficar no Boost-2014.10.tar.gz, está sozinho.

Eu recomendaria a instalação do pacote libboost-dev . Ele instalará o que quer que seja a versão atual do boost do seu sistema e colocará todos os arquivos nos locais apropriados.

E finalmente: quando você removeu a linha #include do seu arquivo, funcionou, mas apenas porque o seu programa não usa nenhuma funcionalidade do boost :: system. Se você fosse usar qualquer classe / função de boost, você teria erros de compilação se não tivesse os cabeçalhos adequados incluídos.

    
por sмurf 20.01.2016 / 06:39