【问题标题】:Make errors - ec_asn1.o - ec_asn1.c:201: error: expected expression before 'X9_62_PENTANOMIAL'出错 - ec_asn1.o - ec_asn1.c:201:错误:“X9_62_PENTANOMIAL”之前的预期表达式
【发布时间】:2015-01-30 19:35:26
【问题描述】:

我正在尝试在 Red Hat 上安装单独版本的 Openssl 1.0.1k。我首先尝试了 Centos,没有任何实际问题。

在遇到此错误之前,我执行了以下操作:

yum install -y libxml2 libxml2-devel libxslt libxslt-devel #不确定这是否真的有助于解决我的错误。 ./config --prefix=/data/home/jboss/openssl_1.0.1/usr\ --openssldir=/data/home/jboss/openssl_1.0.1/etc/ssl # 缺少包含文件。 vi ~/.bash_profile C_INCLUDE_PATH=/usr/lib/bcc/include/ CPLUS_INCLUDE_PATH=/usr/lib/bcc/include/ 导出 C_INCLUDE_PATH 导出 CPLUS_INCLUDE_PATH LANG=en_US # make 给重音一个特殊字符。这固定了。一旦我固定到 en_US.UTF-8,我就会把它放回去。 vi /usr/lib/bcc/include/asm/limits.h 定义 INT_MAX 2147483647

在这一切之后,我得到了以下信息:

....更多在顶部 make[2]: 进入目录`/data01/home/s617741/openssl-1.0.1k/crypto/bn' make[2]: 'all' 无事可做。 make[2]: 离开目录`/data01/home/s617741/openssl-1.0.1k/crypto/bn' 一切都在crypto / ec中...... make[2]: 进入目录`/data01/home/s617741/openssl-1.0.1k/crypto/ec' gcc -I.. -I../.. -I../modes -I../asn1 -I../evp -I../../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa, --noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM -c -o ec_asn1.o ec_asn1.c ec_asn1.c:201:警告:函数“offsetof”的隐式声明 ec_asn1.c:201:错误:“X9_62_PENTANOMIAL”之前的预期表达式 ec_asn1.c:201:错误:初始化元素不是常量 ec_asn1.c:201: 错误: (接近初始化'X9_62_PENTANOMIAL_seq_tt[0].offset') ec_asn1.c:202:错误:“X9_62_PENTANOMIAL”之前的预期表达式 ec_asn1.c:202:错误:初始化元素不是常量 ec_asn1.c:202: 错误: (接近初始化'X9_62_PENTANOMIAL_seq_tt[1].offset') ec_asn1.c:203:错误:“X9_62_PENTANOMIAL”之前的预期表达式 ec_asn1.c:203:错误:初始化元素不是常量 ec_asn1.c:203: 错误: (接近初始化'X9_62_PENTANOMIAL_seq_tt[2].offset') ...继续出现类似的错误。

任何见解都会有所帮助。

【问题讨论】:

    标签: linux redhat openssl


    【解决方案1】:

    offsetof 被定义在<stddef.h> 中,被ec_asn1.crand_egd.c 使用。

    但是,ec_asn1.crand_egd.c 不包括 <stddef.h>

    $ cd openssl-1.0.1
    $ find . -iname ec_asn1.c
    ./crypto/ec/ec_asn1.c
    $ cat crypto/ec/ec_asn1.c | grep stddef
    

    你应该打开ec_asn1.crand_egd.c,并添加#include <stddef.h>

    -----

    针对此问题针对 OpenSSL 提交了一个错误:Bug 3684: Missing <stddef.h> for source files using offsetof。您可以在他们的RT Tracker 中查看状态。使用用户名=guest,密码=guest 登录。

    -----

    这是我正在开发的机器的定义,以备不时之需:

    #if defined(__GNUC__) && (__GNUC__ == 3 && __GNUC_MINOR__ >= 5 || __GNUC__ > 3)
    #ifndef __offsetof      /* Deprecated: for source compatibility only */
    #define __offsetof(type, field) __builtin_offsetof(type, field)
    #endif
    #define offsetof(type, field) __builtin_offsetof(type, field)
    #else /* ! (gcc >= 3.5) */
    #ifndef __offsetof      /* Deprecated: for source compatibility only */
    #define __offsetof(type, field) ((size_t)(&((type *)0)->field))
    #endif
    #define offsetof(type, field) ((size_t)(&((type *)0)->field))
    #endif /* (gcc >= 3.5) */
    

    【讨论】:

      猜你喜欢
      • 2014-02-22
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多