2017-02-17 12 views
5

opendcpをコンパイルしようとしましたが、エラーが発生しました。集計 'BIGNUM foo'は型が不完全で、定義できません

$ 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であると私はそれを修正する方法がわかりません。

答えて

4

OpenSSL 1.0.2とOpenSSL 1.1.0の間に大きな変更があり、完全なソース互換性がありません。特に、1.0.2ヘッダファイルにあった多くのデータ構造が不透明です。 OpenSSLを使用するアプリケーションでは、互換性を保つためにいくつかの小さな変更を加える必要があります。 BIGNUMの場合

、あなたはこのようにそれを実行する必要があります。opendcpの場合

#include <openssl/bn.h> 
int main() { 
    BIGNUM *bn; 

    bn = BN_new(); 

    ... 
    BN_free(bn); 

    return 0; 
} 

おそらく答えはただその代わりにOpenSSL 1.0.2にダウングレードすることです。

+0

ありがとうございます!バージョン1.0.2でうまく動作します:) – jwel

関連する問題