2013-11-24 19 views
8

Sto utilizzando l'inclusione: < openssl/md5.h> nel mio codice c. Quando compilo con "gcc" compilatore non ho eventuali errori, ma quando compilo con cross compiler "arm-linux-gnueabi-gcc" Ho il seguente errore:Cross compilazione "OpenSSL" Errore

/usr/include/openssl/e_os2.h:56:33: fatal error: openssl/opensslconf.h: No such file or directory 
compilation terminated. 

penso che questo errore è dovuto al fatto che non ho le librerie openssl nella cartella del crosscompiler "/ usr/arm-linux-gnueabi-gcc".

Qualcuno può dirmi se è questa la causa dell'errore? E come posso installare le librerie openssl per il cross-compilatore?

Sto iniziando con la compilazione incrociata e non ho molta conoscenza al riguardo. Grazie per il tuo tempo!

+0

Hai trovato la soluzione? Anch'io ho urtato questo problema. Spero che tu abbia trovato la risposta dato che ha 9 mesi. Se trovi la soluzione, rispondi. – neckTwi

risposta

0

Le librerie create una volta per una piattaforma particolare saranno per una piattaforma particolare e possono essere utilizzate solo su un'altra piattaforma solo se il suo binario è compatibile.

Per la compilazione incrociata, potrebbero essere necessari file binari anche per piattaforme diverse.

In merito a questo errore, sembra che non sia stato menzionato il percorso di inclusione per i file di intestazione OpenSSL.

Senza librerie, si otterrà l'errore del linker, non l'errore del compilatore.

In questo caso, il compilatore in qualche modo non è in grado di individuare i file di intestazione. Quindi, assicurati di includere il percorso di inclusione.

+0

Ho menzionato l'inclusione nel mio codice c.Il percorso di inclusione che ho scritto è il seguente: '# include '. Penso che devo compilare le librerie openssl per la croce compilare? Ma come posso farlo? – user2984715

+0

Penso che sia un annuncio fallito – delive

8

So che questa domanda è un po 'vecchia, ma visto che ci sono arrivato con lo stesso problema, ho intenzione di lasciarlo qui per riferimento futuro.

La soluzione che ho trovato era compilare manualmente OpenSSL con il cross-compilatore installato e quindi installarlo manualmente nella cartella delle librerie cross-compilation.

Per prima cosa ho installato il cross-compiler (sto usando Ubuntu 14.04). Ho installato sia il compilatore C che il compilatore C++. Ho anche installato due toolchain cross-compiler, uno con supporto hard-floating point (arm-linux-gnueabihf) e uno senza (arm-linux-gnueabi). Vengono create due directory (come indicato nella domanda) /usr/arm-linux-gnueabi e /usr/arm-linux-gnueabihf, in cui devono essere installate le librerie incrociate.

sudo apt-get install {gcc,g++}-arm-linux-gnueabi{,hf} 

In secondo luogo, clonato il repository Git OpenSSL e controllato la versione che mi interessava (1.0.2):

git clone https://github.com/openssl/openssl 
git checkout OpenSSL_1_0_2  # or another version 

Poi, ho configurato l'ambiente per il cross-compilazione e cambiato l'installazione directory (il prefisso), e costruito la libreria seguendo le istruzioni fornite nel file INSTALL (e forzando di utilizzare la specifica toolchain di cross-compilazione):

export CROSS=arm-linux-gnueabi # or arm-linux-gnueabihf 
export AR=${CROSS}-ar 
export AS=${CROSS}-as 
export CC=${CROSS}-gcc 
export CXX=${CROSS}-g++ 
export LD=${CROSS}-ld 

./Configure --prefix=/usr/${CROSS} os/compiler:${CC} 
make 
sudo make install 

Yo Puoi ripetere il processo e compilare con entrambi i toolchain (arm-linux-gnueabi e arm-linux-gnueabihf).

Spero che questo aiuti.

+0

Si dovrebbe considerare l'utilizzo di un chroot per questo, in quanto sovrascriverà l'openssl del sistema – h0ru5

+0

Non sarà sufficiente impostare il prefisso? –

+0

non l'ho provato, ma potrebbe essere sufficiente dato che configure dovrebbe sapere dove installare – h0ru5

Problemi correlati