Forum: Compiler & IDEs CrossCompile opennssl


von Sabse (Gast)


Lesenswert?

Hallo,

ich möchte openssl für ARM kompilieren, weiß aber nicht wie.
Kann mir jemand bitte helfen?

Es gibt da so viele Anleitungen im Internet, aber irgendwie klappt das 
nicht.

Ich brauche openssl-1.0.1g und möchte es für ARM Linux haben.


Danke an alle.

von Rene H. (Gast)


Lesenswert?

Na, was klappt den nicht?
Gib mal etwas mehr Infos. Was ist das Hostsystem? Compilerfehler etc...

Grüsse,
R.

von Jim M. (turboj)


Lesenswert?

> Ich brauche openssl-1.0.1g

Sicher? Aktuell ist die 1.0.1i Version. Willst Du alte Bug 
nachvollziehen?

Außerdem ist ARM Linux != ARM Linux. Sowas wie OpenSSL will man 
normalerweise für die korrekte CPU Variante compilieren.

von Sabse (Gast)


Lesenswert?

Oh, dann lade ich mal das aktuelle openSSL runter.

Es soll auf einen ARM Cortex A9 laufen.

Ich habe Cross-Compile noch nie gemacht.
Also irgendwie ./configure --host=ARM-Linux oder so muss das aussehen, 
nicht?

von Mampfred (Gast)


Lesenswert?

Sabse schrieb:
> Oh, dann lade ich mal das aktuelle openSSL runter.

Lade auch gleich den richtigen arm-gcc runter.

von denial (Gast)


Lesenswert?

Sabse schrieb:
> Ich habe Cross-Compile noch nie gemacht.
> Also irgendwie ./configure --host=ARM-Linux oder so muss das aussehen,
> nicht?

Nee, OpenSSL verwendet kein Autoconf.
Du musst bei make über die Kommandozeile die CC Variable (und vermutlich 
noch ein paar andere) auf deinen ARM Compiler umbiegen.

von Sabse (Gast)


Lesenswert?

So habe jetzt nochmal für die neue Version gelesen, und da steht man 
solle beim cross-compilieren erst ./Configure machen, das eine Liste 
mölicher Architecture liefert. Und dann ./Configure [arch] gefolgt von 
make.

Ich bin mal so frei die Liste hier anzufügen:
1
pick os/compiler from:
2
BC-32 BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8 
3
BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-pre1.3 DJGPP MPE/iX-gcc OS2-EMX 
4
OS390-Unix QNX6 QNX6-i386 ReliantUNIX SINIX SINIX-N UWIN VC-CE VC-WIN32 
5
VC-WIN64A VC-WIN64I aix-cc aix-gcc aix3-cc aix64-cc aix64-gcc android 
6
android-armv7 android-x86 aux3-gcc beos-x86-bone beos-x86-r5 bsdi-elf-gcc cc 
7
cray-j90 cray-t3e darwin-i386-cc darwin-ppc-cc darwin64-ppc-cc 
8
darwin64-x86_64-cc dgux-R3-gcc dgux-R4-gcc dgux-R4-x86-gcc dist gcc hpux-cc 
9
hpux-gcc hpux-ia64-cc hpux-ia64-gcc hpux-parisc-cc hpux-parisc-cc-o4 
10
hpux-parisc-gcc hpux-parisc1_1-cc hpux-parisc1_1-gcc hpux-parisc2-cc 
11
hpux-parisc2-gcc hpux64-ia64-cc hpux64-ia64-gcc hpux64-parisc2-cc 
12
hpux64-parisc2-gcc hurd-x86 iphoneos-cross irix-cc irix-gcc irix-mips3-cc 
13
irix-mips3-gcc irix64-mips4-cc irix64-mips4-gcc linux-alpha+bwx-ccc 
14
linux-alpha+bwx-gcc linux-alpha-ccc linux-alpha-gcc linux-aout linux-armv4 
15
linux-elf linux-generic32 linux-generic64 linux-ia32-icc linux-ia64 
16
linux-ia64-ecc linux-ia64-icc linux-ppc linux-ppc64 linux-sparcv8 
17
linux-sparcv9 linux-x86_64 linux32-s390x linux64-s390x linux64-sparcv9 mingw 
18
mingw64 ncr-scde netware-clib netware-clib-bsdsock netware-clib-bsdsock-gcc 
19
netware-clib-gcc netware-libc netware-libc-bsdsock netware-libc-bsdsock-gcc 
20
netware-libc-gcc newsos4-gcc nextstep nextstep3.3 osf1-alpha-cc osf1-alpha-gcc 
21
purify qnx4 rhapsody-ppc-cc sco5-cc sco5-gcc solaris-sparcv7-cc 
22
solaris-sparcv7-gcc solaris-sparcv8-cc solaris-sparcv8-gcc solaris-sparcv9-cc 
23
solaris-sparcv9-gcc solaris-x86-cc solaris-x86-gcc solaris64-sparcv9-cc 
24
solaris64-sparcv9-gcc solaris64-x86_64-cc solaris64-x86_64-gcc sunos-gcc 
25
tandem-c89 tru64-alpha-cc uClinux-dist uClinux-dist64 ultrix-cc ultrix-gcc 
26
unixware-2.0 unixware-2.1 unixware-7 unixware-7-gcc vos-gcc vxworks-mips 
27
vxworks-ppc405 vxworks-ppc60x vxworks-ppc750 vxworks-ppc750-debug 
28
vxworks-ppc860 vxworks-ppcgen vxworks-simlinux debug debug-BSD-x86-elf 
29
debug-Cygwin debug-VC-WIN32 debug-VC-WIN64A debug-VC-WIN64I debug-ben 
30
debug-ben-darwin64 debug-ben-debug debug-ben-debug-64 debug-ben-macos 
31
debug-ben-macos-gcc46 debug-ben-no-opt debug-ben-openbsd 
32
debug-ben-openbsd-debug debug-ben-strict debug-bodo debug-darwin-i386-cc 
33
debug-darwin-ppc-cc debug-geoff32 debug-geoff64 debug-levitte-linux-elf 
34
debug-levitte-linux-elf-extreme debug-levitte-linux-noasm 
35
debug-levitte-linux-noasm-extreme debug-linux-elf debug-linux-elf-noefence 
36
debug-linux-generic32 debug-linux-generic64 debug-linux-ia32-aes 
37
debug-linux-pentium debug-linux-ppro debug-linux-x86_64 debug-rse 
38
debug-solaris-sparcv8-cc debug-solaris-sparcv8-gcc debug-solaris-sparcv9-cc 
39
debug-solaris-sparcv9-gcc debug-steve-opt debug-steve32 debug-steve64 
40
debug-ulf debug-vos-gcc 
41
42
NOTE: If in doubt, on Unix-ish systems use './config'.

Wie gesagt, das soll für ein ARM Cortex A9 mit Linux mit 
gcc-linaro-arm-linux-gnueabihf_linux sein.

Was soll ich denn da wählen?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

1) Na dann teste einfach ob configure (nicht: "Configure") diesen Host 
kennt.

2) Bei --host= würd ich immer auch --build setzen, damit ganz klar 
gesagt ist, dass es sich um einen Cross-Build handelt.

3) Wenn configure den Host nicht kennt und es sich um ein Standard GNU 
Build-System handelt, dann gibt es eine config.sub.  Erweitere diese für 
deinen Host.  Wenn deine Toolchain Vanilla GCC ist, sollte das genügen.

4) Wenn es absehbar ist, dass du mehrmals neu configuren musst weil die 
Optionen etc. unklar sind, dann ist ./configure eine schlechte Wahl. 
Mache den Build von einem leeren Verzeichnis aus, das kein 
Unterverzeichnis der Quellen ist.  Damit hast du mit Löschen des 
Build-Verzeichnisses tabula rasa.  ./configure verpestet dir das 
Quellverzeichnis, und ob make clean / distclean / realclean 
oder-was-auch-immer-clean richtig funktionieren ist bei vielen Projekten 
Russisch Roulette...

5) Was für Build-Verzeichnis gilt, gilt auch für's 
Installationsverzeichnis.  Zunächst eine --prefix wählen die nix kaputt 
macht und für die man keine Admin sind muss.

von Sabse (Gast)


Lesenswert?

Johann L. schrieb:
> 1) Na dann teste einfach ob configure (nicht: "Configure") diesen
> Host
> kennt.

Da gibt es nur "config" und "Configure" (grosses C), siehe oben.
Wie Testen?

> 3) Wenn configure den Host nicht kennt und es sich um ein Standard GNU
> Build-System handelt, dann gibt es eine config.sub.  Erweitere diese für
> deinen Host.  Wenn deine Toolchain Vanilla GCC ist, sollte das genügen.

config.sub gibt es nicht.
Wie oben geschrieben muesste man Configure erweitern, aber das ist mir 
zu hoch.

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sabse schrieb:
> Johann L. schrieb:
>> 1) Na dann teste einfach ob configure (nicht: "Configure") diesen
>> Host
>> kennt.
>
> Da gibt es nur "config" und "Configure" (grosses C), siehe oben.
> Wie Testen?
>
>> 3) Wenn configure den Host nicht kennt und es sich um ein Standard GNU
>> Build-System handelt, dann gibt es eine config.sub.  Erweitere diese für
>> deinen Host.  Wenn deine Toolchain Vanilla GCC ist, sollte das genügen.
>
> config.sub gibt es nicht.
> Wie oben geschrieben muesste man Configure erweitern, aber das ist mir
> zu hoch.

ojeojeoje, hab mal nen Blick in die Quellen riskiert.

Configure ist komplett Marke Eigenbau ...immerhin hat man dann was 
eigenes, wenn die Kinder mal aus dem Haus sind.

Was im GNU Build-System config.sub erledigt schein da in config 
abgearbeitet zu werden anhand von MACHINE, RELEASE, VERSION und BUILD. 
Es gibt da genug Beispielcode wie verschiedene Systeme abzubilden sind, 
und CROSS_COMPILE lässt darauf hoffen dass Cross-Compilierung ohne 
Kopfstand zu machen möglich ist.

Schließlich erlaubt Configure die Angabe des Compilers und weiterer 
Optionen, siehe z.B. Ende von config.

Falls das alles zu mühselig ist oder zu unsicher (immerhin soll es ein 
ssl werden), würd ich mich an die Entwickler wenden.  Nicht unüblich 
dafür sind Mailing-Listen.  Die OpenSSL FAQ erwähnt zwar MLs und 
verweist auf Readme für Details; allerdings scheint es nur eine ML for 
OpenSSL-Entwickler zu geben, keine für dessen Anwender.

Falls du Readme noch nicht gelesen hast, tu es.  Dafür ist es da ;-) 
Dito für INSTALL.  Falls das aller immer noch nicht hilft:
 
1
 SUPPORT
2
 -------
3
4
 See the OpenSSL website www.openssl.org for details of how to obtain
5
 commercial technical support.

von denial (Gast)


Lesenswert?

Sabse schrieb:
> Was soll ich denn da wählen?

Nimm linux-armv4, das tut auch auf nem Cortex-A9 schneller als der reine 
C Code von linux-elf. Bei Interesse kann ich Ergebnisse von "openssl 
speed" von einem, äh, 800MHz A9 auf Pastebin hochladen.

von Hm. (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.