-1

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

4

1 回答 1

2

我敢打赌,您拥有的某些头文件正在#define生成一个干扰socket.h. 你能编译一个只包含<sys/socket.h>,没有其他包含的程序吗?

接下来要检查的是查看/usr/include/bits/socket.h第 231 行(第一个错误发生的位置)上的内容。如果代码看起来没问题,那么下一步就是看看预处理后的源代码是什么样子的。要获取预处理输出,请将命令行中的-c选项替换为,并将选项更改为将预处理器输出放入文件中。-E-o obj/alert.o-o alert.iialert.ii

如果您比较alert.iiwith的内容/usr/include/bits/socket.h,您可以查看它是否按预期编译。特别是,如果有一个宏将某些东西定义为意想不到的东西,您会在编译器指出的位置看到明显错误的代码。

于 2013-04-01T04:38:08.803 回答