我正在尝试在我的EC2实例上编译比特币,我遇到了一个我无法弄清楚的问题。构建脚本在以下命令
上停止g++ -c -Wall -Wextra -Wformat -Wformat-security -Wno-unused-parameter -g -DMSG_NOSIGNAL=0 -DBOOST_SPIRIT_THREADSAFE -DUSE_UPNP=1 -DUSE_IPV6=1 -I/home/ec2-user/bitcoin/src/leveldb/include -I/home/ec2-user/bitcoin/src/leveldb/helpers -DHAVE_BUILD_INFO -I"/home/ec2-user/bitcoin/src" -I"/home/ec2-user/bitcoin/src/obj" -I"/usr/local/include" -I"/usr/include/openssl" -MMD -MF obj/alert.d -o obj/alert.o alert.cpp
返回以下错误
In file included from /usr/include/sys/socket.h:40:0,
from compat.h:19,
from netbase.h:11,
from util.h:27,
from alert.h:13,
from alert.cpp:11:
/usr/include/bits/socket.h:231:5: error: expected identifier before numeric constant
/usr/include/bits/socket.h:231:5: error: expected ‘}’ before numeric constant
/usr/include/bits/socket.h:231:5: error: expected unqualified-id before numeric constant
In file included from compat.h:19:0,
from netbase.h:11,
from util.h:27,
from alert.h:13,
from alert.cpp:11:
/usr/include/sys/socket.h:254:1: error: expected declaration before ‘}’ token
我尝试使用-std = c ++ 0x选项集进行编译,但没有区别。这是我唯一能想到的。
答案 0 :(得分:2)
我打赌你有一些头文件是#define
一个干扰socket.h
的宏。您是否能够编译仅包含<sys/socket.h>
的程序,而不包含其他内容?
接下来要检查的是查看/usr/include/bits/socket.h
并查看231行(第一个错误发生的位置)的内容。如果代码看起来没问题,那么下一步就是查看预处理源的外观。要获取预处理的输出,请在命令行上将-c
选项替换为-E
,并将-o obj/alert.o
选项更改为-o alert.ii
,以将预处理器输出放入文件{{ 1}}。
如果您将alert.ii
的内容与alert.ii
进行比较,则可以看到它是否按预期编译。特别是,如果有一个宏将某些东西定义为意外的东西,你会看到编译器指出的位置明显错误的代码。