2013-04-01 2 views
0

Я пытаюсь скомпилировать биткойн на моем экземпляре EC2, и у меня возникла проблема, которую я не могу понять. Сценарий сборки останавливается на следующей командыОшибка компилятора в socket.h на Amazon 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 вариант набора, но он сделал нет разницы. Это было единственное, что я смог придумать.

ответ

2

Я бы поставил пари, что у вас есть заголовочный файл #define с макросом, который мешает socket.h. Можете ли вы скомпилировать программу, которая включает только <sys/socket.h>, без каких-либо других включений?

Следующее, что нужно проверить, это посмотреть на /usr/include/bits/socket.h и посмотреть, что находится в строке 231 (где происходит первая ошибка). Если код выглядит нормально, то следующим шагом будет посмотреть, как выглядит обработанный исходный код. Чтобы получить предварительно обработанный вывод, замените опцию -c на -E в командной строке и измените опцию -o obj/alert.o на -o alert.ii, чтобы вывести вывод препроцессора в файл alert.ii.

Если вы сравниваете контент alert.ii с /usr/include/bits/socket.h, вы можете увидеть, собирается ли он скомпилироваться в ожидании или нет. В частности, если есть макрос, который что-то определяет во что-то неожиданное, вы увидите код, который явно ошибочен в местоположении, которое указывает компилятор.

Смежные вопросы