2017-02-17 76 views
5

opendcp derlemeyi denedim, ancak hata oluştu.Agrega ‘BIGNUM foo’ tamamlanmamıştır ve tanımlı olamaz

$ 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 

Benim için openssl sorunu gibi görünüyor, bu yüzden bu test etmeye çalıştı:

$ 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; 
     ^~ 

benim openssl versiyonu 1.1.0d-2 ve ben bunu düzeltmek için nasıl bilmiyorum.

cevap

4

OpenSSL 1.0.2 ile OpenSSL 1.1.0 arasında büyük değişiklikler vardı ve bunlar tamamen kaynak uyumlu değiller. Özellikle 1.0.2 başlık dosyalarında bulunan birçok veri yapısı artık opaktır. OpenSSL kullanan uygulamaların bazı küçük değişikliklerin uyumlu olmasını sağlaması gerekir. Bignum durumunda

, sen böyle yapmak gerekir: opendcp durumunda

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

    bn = BN_new(); 

    ... 
    BN_free(bn); 

    return 0; 
} 

muhtemelen cevabı sadece yerine OpenSSL 1.0.2 sürümüne etmektir.

+0

Teşekkürler! 1.0.2 sürümünde iyi çalışıyor :) – jwel