我尝试编译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,我不知道如何解决它。
答案 0 :(得分:5)
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。