【问题标题】:Compiling Node gives "No-old-style-declaration" flag error编译节点给出“No-old-style-declaration”标志错误
【发布时间】:2012-10-30 00:00:14
【问题描述】:

我正在为外部系统 (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

谢谢!

【问题讨论】:

    标签: node.js gcc compiler-errors


    【解决方案1】:

    此错误来自cc1(GCC 的一部分),因此与 make 无关。

    -W[no-]old-style-declaration 警告选项于 2007 年初在 this GCC change 中引入,并且可能首次出现在 GCC 4.3 中。因此,您的 GCC 似乎早于 4.3。

    您可以通过升级 GCC 来解决此问题,但最好还是坚持使用 Scientific Linux 提供的 GCC。可以想象,Node.js 有一个配置选项来控制这一点,或者您更可能只是手动编辑掉 -Wno-old-style-declaration 从它出现在 makefile 源中的任何位置。

    如果 Node.js 的 README 没有将 GCC 4.3 列为先决条件,您可能需要向 Node.js 维护者指出这一点。

    【讨论】:

      【解决方案2】:

      这种依赖关系已经在this node issue 中得到确认,并且有一个补丁可以使用。 (为我工作!)

      一种解决方法是(暂时)切换到不包含此依赖项的旧版本的 Node。

      【讨论】:

        猜你喜欢
        • 2019-10-30
        • 2022-12-18
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        • 2023-03-26
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        相关资源
        最近更新 更多