mnisten falha com erro makefile: 2: receita para destino 'mnisten' falha make: *** [mnisten] Erro 1

-1

Eu estou tentando compilar o mnisten usando g++ -Wall -O2 -libboost_filesystem -std=c++0x -o mnisten src/main.cpp , ele falha com o erro

/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:277:19458: warning: null character(s) ignored
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:277:7: error: stray ‘7’ in program
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:277:19465: warning: null character(s) ignored
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:277:7: error: stray ‘’ in program
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:277:19480: warning: null character(s) ignored
In file included from src/main.cpp:16:0:
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:1:2: error: ‘ELF’ does not name a type
 ELF          >    �o      @       ��         @ 8  @                
  ^
/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so:2:24: error: expected declaration before ‘}’ token
                     P}     P}!     P}!                             �
                        ^
makefile:2: recipe for target 'mnisten' failed
make: *** [mnisten] Error 1
    
por Murugesan Thangavel 12.12.2016 / 06:00

1 resposta

1

O problema

Ele diz que In file included from src/main.cpp:16:0 tem erros ao tentar usar um arquivo de biblioteca .so como se fosse um arquivo de origem C ++. .so files definitivamente não são arquivos fonte C ++, então é claro que você terá erros lá.

Veja a linha 16 de src/main.cpp e veja o que está errado aí. Você provavelmente está fazendo algo como #include "/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so" .

#include deve ser usado apenas para incluir arquivos de origem C ++ (geralmente .h files). Nunca deve ser usado para arquivos .so .

A solução

A opção g++ do -L pode ser usada para dizer onde as bibliotecas binárias estão localizadas e sua opção -l pode ser usada para dizer a ela para usar uma biblioteca específica.

Observe que -lname tentará usar libname.so , portanto você não deseja que a parte lib do nome seja incluída, ou você obterá o problema de que -libname tente usar libibname.so .

  1. Remova as linhas #include que incluem .so arquivos.
  2. Altere g++ -Wall -O2 -libboost_filesystem -std=c++0x -o mnisten src/main.cpp para algo como:

    g++ -Wall -O2 -L/home/dell/boost_1_55_0/stage/lib -lboost_filesystem -std=c++0x -o mnisten src/main.cpp
    

    Você pode simplesmente colocar o caminho completo para o arquivo .so da seguinte forma:

    g++ -Wall -O2 -std=c++0x -o mnisten /home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so src/main.cpp
    
por Chai T. Rex 12.12.2016 / 06:37