Сборка Node.JS в Solaris: «Использование <stdbool.h> допустимо только в среде компиляции c99». - PullRequest
2 голосов
/ 19 марта 2011

Я пытаюсь установить Node.JS на Solaris. Это стандартная версия Solaris 9/10 x86 (последняя версия сентября 2010 г.), в которой используются только пакеты по умолчанию.

Здесь приведены следующие указания: https://github.com/joyent/node/wiki/Installation. Я использую последнюю стабильную версию Node.JS, найденную на их домашней странице http://nodejs.org

Вот что я пробовал ...

-bash-3.00# export PATH=$PATH:/usr/sfw/bin:/usr/xpg4/bin
-bash-3.00# ./configure --prefix=/tmp/node
Checking for program g++ or c++          : /usr/sfw/bin/g++ 
Checking for program cpp                 : /usr/sfw/bin/cpp 
Checking for program ar                  : /usr/xpg4/bin/ar 
Checking for program ranlib              : not found 
Checking for g++                         : ok  
Checking for program gcc or cc           : /usr/sfw/bin/gcc 
Checking for program ar                  : /usr/xpg4/bin/ar 
Checking for program ranlib              : not found 
Checking for gcc                         : ok  
Checking for library dl                  : yes 
Checking for openssl                     : yes 
Checking for library util                : not found 
Checking for library rt                  : yes 
Checking for library socket              : yes 
Checking for library nsl                 : yes 
--- libeio ---
Checking for library pthread             : yes 
Checking for function pthread_create     : yes 
Checking for function pthread_atfork     : yes 
Checking for futimes(2)                  : no 
Checking for readahead(2)                : no 
Checking for fdatasync(2)                : no 
Checking for pread(2) and pwrite(2)      : yes 
Checking for sendfile(2)                 : no 
Checking for sync_file_range(2)          : no 
--- libev ---
Checking for header sys/inotify.h        : not found 
Checking for header sys/epoll.h          : not found 
Checking for header port.h               : yes 
Checking for function port_create        : yes 
Checking for header poll.h               : yes 
Checking for function poll               : yes 
Checking for header sys/event.h          : not found 
Checking for header sys/queue.h          : yes 
Checking for function kqueue             : not found 
Checking for header sys/select.h         : yes 
Checking for function select             : yes 
Checking for header sys/eventfd.h        : not found 
Checking for SYS_clock_gettime           : no 
Checking for library rt                  : yes 
Checking for function clock_gettime      : yes 
Checking for function nanosleep          : yes 
Checking for function ceil               : yes 
Checking for fdatasync(2) with c++       : no 
'configure' finished successfully (1.936s)
-bash-3.00# make
Waf: Entering directory `/tmp/node-v0.4.3/build'
DEST_OS: sunos
DEST_CPU: ia32
Parallel Jobs: 1
Product type: program
[ 3/75] cc: deps/c-ares/ares_strcasecmp.c -> build/default/deps/c-ares/ares_strcasecmp_1.o
/usr/sfw/bin/gcc -D_GNU_SOURCE -DHAVE_CONFIG_H=1 -threads -m32 -g -O3 -DHAVE_OPENSSL=1 -DEV_FORK_ENABLE=0 -DEV_EMBED_ENABLE=0 -DEV_MULTIPLICITY=0 -DX_STACKSIZE=65536 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DEV_MULTIPLICITY=0 -DHAVE_FDATASYNC=0 -DPLATFORM="sunos" -D__POSIX__=1 -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -DNDEBUG -Idefault/deps/c-ares -I../deps/c-ares -Idefault/deps/c-ares/sunos-ia32 -I../deps/c-ares/sunos-ia32 ../deps/c-ares/ares_strcasecmp.c -c -o default/deps/c-ares/ares_strcasecmp_1.o
In file included from ../deps/c-ares/setup_once.h:73,
                 from ../deps/c-ares/sunos-ia32/ares_setup.h:195,
                 from ../deps/c-ares/ares_strcasecmp.c:18:
/usr/include/stdbool.h:42:2: #error "Use of <stdbool.h> is valid only in a c99 compilation environment."
Waf: Leaving directory `/tmp/node-v0.4.3/build'
Build failed:  -> task failed (err #1): 
        {task: cc ares_strcasecmp.c -> ares_strcasecmp_1.o}
*** Error code 1
The following command caused the error:
python tools/waf-light --product-type=program build
make: Fatal error: Command failed for target `program'
-bash-3.00# 

Я думаю, что ключевая ошибка

/usr/include/stdbool.h:42:2: #error "Use of <stdbool.h> is valid only in a c99 compilation environment."

который я могу воссоздать вот так

-bash-3.00# cd build
-bash-3.00# /usr/sfw/bin/gcc -D_GNU_SOURCE -DHAVE_CONFIG_H=1 -threads -m32 -g -O3 -DHAVE_OPENSSL=1 -DEV_FORK_ENABLE=0 -DEV_EMBED_ENABLE=0 -DEV_MULTIPLICITY=0 -DX_STACKSIZE=65536 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DEV_MULTIPLICITY=0 -DHAVE_FDATASYNC=0 -DPLATFORM="sunos" -D__POSIX__=1 -Wno-unused-parameter -D_FORTIFY_SOURCE=2 -DNDEBUG -Idefault/deps/c-ares -I../deps/c-ares -Idefault/deps/c-ares/sunos-ia32 -I../deps/c-ares/sunos-ia32 ../deps/c-ares/ares_strcasecmp.c -c -o default/deps/c-ares/ares_strcasecmp_1.o
In file included from ../deps/c-ares/setup_once.h:73,
                 from ../deps/c-ares/sunos-ia32/ares_setup.h:195,
                 from ../deps/c-ares/ares_strcasecmp.c:18:
/usr/include/stdbool.h:42:2: #error "Use of <stdbool.h> is valid only in a c99 compilation environment."
-bash-3.00# cd ..
-bash-3.00# 

Есть идеи? Нужно ли указывать другую опцию для использования C99 или не использовать C99?

Опять же, это из коробки Solaris 9/10 на x86. Я не сделал ничего, что могло бы изменить какой-либо компилятор или что-либо еще, что установлено по умолчанию.

1 Ответ

3 голосов
/ 19 марта 2011

Попробуйте добавить -std=c99 или -std=gnu99 к вашему CFLAGS перед вызовом ./configure, вот так:

CFLAGS=-std=c99 ./configure --prefix=/tmp/node

Эта ошибка означает, что Node.JS, вероятно, использует AC_PROG_CC в своем скрипте configure.ac, когда он должен использовать AC_PROG_CC_C99, см. страницу по обнаружению компилятора C в руководстве autoconf . Вы должны сообщить об этой ошибке разработчикам Node.JS и проверить, что в вашей системе работает правильное решение.

...