我正在为外部系统(Scientific Linux)编译Node.js,我在编译时遇到了这个错误。我已经检查了在README中构建Node的先决条件,我安装了Python,我的make版本是3.81。我不确定为什么那面旗帜会抛出cc1 ......
make -C out BUILDTYPE=Release V=1
make[1]: Entering directory `/home/nick/node_src/out'
...
...
...
cc '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DL_ENDIAN' '-DOPENSSL_THREADS' '-DPURIFY' '-D_REENTRANT' '-DOPENSSL_NO_DGRAM' '-DOPENSSL_NO_DTLS1' '-DOPENSSL_NO_SCTP' '-DOPENSSL_NO_SOCK' '-DOPENSSL_NO_RDRAND' '-DOPENSSL_NO_GOST' '-DOPENSSL_NO_HW_PADLOCK' '-DENGINESDIR="/dev/null"' '-DOPENSSLDIR="/etc/ssl"' '-DTERMIOS' -I../deps/openssl -I../deps/openssl/openssl -I../deps/openssl/openssl/crypto -I../deps/openssl/openssl/crypto/asn1 -I../deps/openssl/openssl/crypto/evp -I../deps/openssl/openssl/crypto/md2 -I../deps/openssl/openssl/crypto/modes -I../deps/openssl/openssl/crypto/store -I../deps/openssl/openssl/include -I../deps/openssl/config/k8 -Wall -Wextra -Wno-unused-parameter -pthread -m64 -Wno-missing-field-initializers -Wno-old-style-declaration -O2 -fno-strict-aliasing -fno-tree-vrp -fno-tree-sink -MMD -MF /home/nick/node_src/out/Release/.deps//home/nick/node_src/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/bio_ssl.o.d.raw -c -o /home/nick/node_src/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/bio_ssl.o ../deps/openssl/openssl/ssl/bio_ssl.c
cc1: error: unrecognized command line option "-Wno-old-style-declaration"
make[1]: *** [/home/nick/node_src/out/Release/obj.target/openssl/deps/openssl/openssl/ssl/bio_ssl.o] Error 1
make[1]: Leaving directory `/home/nick/node_src/out'
make: *** [node] Error 2
谢谢!
答案 0 :(得分:2)
此错误来自cc1
(GCC的一部分),因此与make无关。
-W[no-]old-style-declaration
警告选项于2007年初在this GCC change中引入,可能首次出现在GCC 4.3中。所以看来你的海湾合作委员会早于4.3。
你可以通过升级GCC解决这个问题,但最好坚持使用Scientific Linux提供的GCC。可以想象Node.js有一个配置选项可以控制它,或者更有可能你只需从makefile源中的任何地方手动编辑-Wno-old-style-declaration
。
如果Node.js的自述文件没有列出GCC 4.3作为先决条件,您可能需要将其指向Node.js维护者。
答案 1 :(得分:1)
此依赖性已在this node issue中确认,并且您可以使用补丁。 (为我工作!)
解决方法是(暂时)切换到不包含此依赖性的较旧版本的Node。