Amazon EC2上socket.h中的编译器错误

时间:2013-04-01 03:59:32

标签: c++ amazon-ec2 bitcoin

我正在尝试在我的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选项集进行编译,但没有区别。这是我唯一能想到的。

1 个答案:

答案 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进行比较,则可以看到它是否按预期编译。特别是,如果有一个宏将某些东西定义为意外的东西,你会看到编译器指出的位置明显错误的代码。