mnisten make 失败,错误为 makefile:2:目标“mnisten”的配方失败:*** [mnisten] 错误 1

mnisten make 失败,错误为 makefile:2:目标“mnisten”的配方失败:*** [mnisten] 错误 1

我正在尝试使用编译 mnisten g++ -Wall -O2 -libboost_filesystem -std=c++0x -o mnisten src/main.cpp,但失败并出现错误

/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 ‘\177’ 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 ‘\1’ 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

答案1

问题

它说In file included from src/main.cpp:16:0,然后在尝试使用.so库文件时出现错误,就好像它是一个 C++ 源文件一样。.so文件肯定不是 C++ 源文件,所以当然会出错。

查看第 16 行src/main.cpp,看看那里出了什么问题。您可能正在执行类似以下操作#include "/home/dell/boost_1_55_0/stage/lib/libboost_filesystem.so"

#include仅用于包含 C++ 源文件(通常是.h文件)。它永远不能用于.so文件。

解决方案

g++-L选项可用于告诉它二进制库的位置,并且其-l选项可用于告诉它使用特定的库。

请注意,-lname将尝试使用libname.so,因此您不希望lib包含名称的部分,否则您将遇到-libname尝试使用的问题libibname.so

  1. 删除所有#include包含.so文件的行。
  2. 更改g++ -Wall -O2 -libboost_filesystem -std=c++0x -o mnisten src/main.cpp为类似:

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

    您也可以直接输入文件的完整路径,.so如下所示:

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

相关内容