【问题标题】:Aggregate ‘BIGNUM foo’ has incomplete type and cannot be defined聚合“BIGNUM foo”的类型不完整,无法定义
【发布时间】:2020-02-21 21:53:45
【问题描述】:

我尝试编译opendcp,但出现错误。

$ make

...

[ 10%] Building CXX object libasdcp/CMakeFiles/opendcp-asdcp.dir/KM_prng.cpp.o
/home/jwel/opendcp/libasdcp/KM_prng.cpp: In function ‘void Kumu::Gen_FIPS_186_Value(const byte_t*, ui32_t, byte_t*, ui32_t)’:
/home/jwel/opendcp/libasdcp/KM_prng.cpp:219:10: error: aggregate ‘BIGNUM c_2powb’ has incomplete type and cannot be defined
   BIGNUM c_2powb, c_2, c_b;
          ^~~~~~~
/home/jwel/opendcp/libasdcp/KM_prng.cpp:219:19: error: aggregate ‘BIGNUM c_2’ has incomplete type and cannot be defined
   BIGNUM c_2powb, c_2, c_b;
                   ^~~
/home/jwel/opendcp/libasdcp/KM_prng.cpp:219:24: error: aggregate ‘BIGNUM c_b’ has incomplete type and cannot be defined
   BIGNUM c_2powb, c_2, c_b;
                        ^~~
/home/jwel/opendcp/libasdcp/KM_prng.cpp:220:19: error: ‘BN_init’ was not declared in this scope
   BN_init(&c_2powb);  BN_init(&c_2);  BN_init(&c_b);
                   ^
/home/jwel/opendcp/libasdcp/KM_prng.cpp:248:14: error: aggregate ‘BIGNUM bn_tmp’ has incomplete type and cannot be defined
       BIGNUM bn_tmp, bn_xkey, bn_x_n;
              ^~~~~~
/home/jwel/opendcp/libasdcp/KM_prng.cpp:248:22: error: aggregate ‘BIGNUM bn_xkey’ has incomplete type and cannot be defined
       BIGNUM bn_tmp, bn_xkey, bn_x_n;
                      ^~~~~~~
/home/jwel/opendcp/libasdcp/KM_prng.cpp:248:31: error: aggregate ‘BIGNUM bn_x_n’ has incomplete type and cannot be defined
       BIGNUM bn_tmp, bn_xkey, bn_x_n;
                               ^~~~~~
libasdcp/CMakeFiles/opendcp-asdcp.dir/build.make:110: recipe for target 'libasdcp/CMakeFiles/opendcp-asdcp.dir/KM_prng.cpp.o' failed
make[2]: *** [libasdcp/CMakeFiles/opendcp-asdcp.dir/KM_prng.cpp.o] Error 1
make[1]: *** [libasdcp/CMakeFiles/opendcp-asdcp.dir/all] Error 2
make: *** [all] Error 2

对我来说似乎是 openssl 问题,所以我尝试对此进行测试:

$ cat testBIGNUM.cpp
#include <openssl/bn.h>
int main(){
    BIGNUM bn;
}

$ g++ testBIGNUM.cpp
testBIGNUM.cpp: In function ‘int main()’:
testBIGNUM.cpp:4:9: error: aggregate ‘BIGNUM bn’ has incomplete type and cannot be defined
  BIGNUM bn;
         ^~

我的 openssl 版本是 1.1.0d-2,我不知道如何修复它。

【问题讨论】:

    标签: c++ makefile openssl


    【解决方案1】:

    OpenSSL 1.0.2 和 OpenSSL 1.1.0 之间发生了很大的变化,它们并不完全兼容源代码。特别是 1.0.2 头文件中的许多数据结构现在是不透明的。使用 OpenSSL 的应用程序需要进行一些小的更改才能兼容。

    在 BIGNUM 的情况下,你需要这样做:

    #include <openssl/bn.h>
    int main() {
        BIGNUM *bn;
    
        bn = BN_new();
    
        ...
        BN_free(bn);
    
        return 0;
    }
    

    在 opendcp 的情况下,答案可能只是降级到 OpenSSL 1.0.2。

    【讨论】:

    • 我正在尝试将 OpenSSL 升级到 1.1.1。它也造成了这个问题。 :(
    猜你喜欢
    • 2014-05-20
    • 2021-06-24
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 2013-07-21
    • 2012-07-29
    • 1970-01-01
    相关资源
    最近更新 更多