2017-02-17 11 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

ओपनएसएसएल 1.0.2 और ओपनएसएसएल 1.1.0 के बीच बड़े बदलाव हुए थे और वे पूरी तरह से संगत स्रोत नहीं हैं। विशेष रूप से 1.0.2 शीर्षलेख फ़ाइलों में मौजूद कई डेटा संरचनाएं अपारदर्शी हैं। ओपनएसएसएल का उपयोग करने वाले अनुप्रयोगों को कुछ छोटे बदलावों को संगत होने की आवश्यकता होती है।

bignum के मामले में, अगर आप इस तरह यह सब करने की ज़रूरत:

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

    bn = BN_new(); 

    ... 
    BN_free(bn); 

    return 0; 
} 

opendcp के मामले में शायद इस सवाल का जवाब सिर्फ OpenSSL 1.0.2 बजाय में डाउनग्रेड करने का है।

+0

धन्यवाद! यह संस्करण 1.0.2 पर अच्छी तरह से काम करता है :) – jwel

संबंधित मुद्दे