Domanda: Stavo compilando Ruby versione 1.9.3 su una macchina CentOS e mi sono imbattuto nel seguente messaggio di errore durante l'esecuzione di make comando.
EC_GROUP_new_curve_GF2m undeclared (first use in this function)
L'errore si è verificato durante la compilazione di ossl_pkey_ec.c file.
Ecco l'istantanea dell'errore completo:
# ./configure
#make ossl_pkey_ec.c: In function âossl_ec_group_initializeâ: ossl_pkey_ec.c:761:17: warning: implicit declaration of function âEC_GF2m_simple method [-Wimplicit-function-declaration] method = EC_GF2m_simple_method(); ^ ossl_pkey_ec.c:761:24: warning: assignment makes pointer from integer without a cast [enabled by default] method = EC_GF2m_simple_method(); ^ ossl_pkey_ec.c:816:29: error: âEC_GROUP_new_curve_GF2mâ undeclared (first use in this function) new_curve = EC_GROUP_new_curve_GF2m; ^ ossl_pkey_ec.c:816:29: note: each undeclared identifier is reported only once for each function it appears in make[2]: *** [ossl_pkey_ec.o] Error 1 make[2]: Leaving directory `/root/ruby-1.9.3-p374/ext/openssl' make[1]: *** [ext/openssl/all] Error 2 make[1]: Leaving directory `/root/ruby-1.9.3-p374' make: *** [build-ext] Error 2
Aiutami a risolvere l'errore.
Soluzione:
Una semplice ricerca su Google sul messaggio di errore EC_GROUP_new_curve_GF2m non dichiarato (primo utilizzo in questa funzione) ha suggerito che si tratta di un bug noto in Ruby con la build OpenSSL. Fortunatamente, gli sviluppatori hanno risolto il problema con una patch.
Segui i passaggi seguenti per eseguire la patch prima di creare (creare) Ruby:
Passaggio 1 :Presumo che la tua attuale directory di lavoro sia la directory dei sorgenti di Ruby.
Passaggio 2 :Scarica la patch come mostrato di seguito:
# wget https://bugs.ruby-lang.org/attachments/download/3707/out.patch
# ls out.patch out.patch
Passaggio 3 :Scopri il file di cui hai bisogno per patchare. Dal messaggio di errore sopra riportato, è chiaro che il bug è presente nel file 'ossl_pkey_ec.c'.
# find . -name ossl_pkey_ec.c ./ext/openssl/ossl_pkey_ec.c
Passaggio 4 :esegui la patch scaricata
# patch ./ext/openssl/ossl_pkey_ec.c < out.patch patching file ./ext/openssl/ossl_pkey_ec.c Hunk #1 succeeded at 757 (offset -5 lines). Hunk #2 succeeded at 814 (offset -5 lines). patching file ./ext/openssl/ossl_pkey_ec.c Hunk #1 FAILED at 7. 1 out of 1 hunk FAILED -- saving rejects to file ./ext/openssl/ossl_pkey_ec.c.rej
Ora la patch è fatta. Prova a costruire di nuovo Ruby.
[Ruby_source_directory] # make
Spero che aiuti.