我正在尝试使用编译 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
。
- 删除所有
#include
包含.so
文件的行。 更改
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