nischram / E3dcGui

E3DC S10 / HomeMatic Daten abfragen, darstellen oder senden
38 stars 14 forks source link

AES.cpp compiles only for 32 Bit #4

Closed RalfJL closed 8 years ago

RalfJL commented 8 years ago

Hi,

this is not an issue, as long as raspberry is on 32Bit only. The problem is that the AES code is hand optimized but not portable. It will run only on 32bit systems. E.g. on 64Bit Linux it will fail unless you compile it to a 32bit application.

I would like to recommend the following change in the Makefile Line 24: $(CXX) -O4 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o $@

should be: $(CXX) -O4 -m32 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o $@

That way it will work on Linux 64Bit as well (as long as 32Bit support is installed)

Thanks

Ralf

nischram commented 8 years ago

Hallo Ralf,

mien Compiler verarbeitet "-m32" nicht:

pi@raspberrypi:~/E3dcGui $ make  
rm watchdog screenSave GuiMain start stop RscpMain Frame/touchtest  
g++ -O1 Watchdog.cpp -o watchdog   
cc -O1 screenSave.c -o screenSave   
cc -O1 GuiMain.c -o GuiMain  
cc -O1 start.c -o start   
cc -O1 stop.c -o stop  
g++ -O3 -m32 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o RscpMain  
g++: error: unrecognized command line option ‘-m32’  
Makefile:24: recipe for target 'RscpMain' failed  
make: *** [RscpMain] Error 1

Meine Compiler Version ist:

pi@raspberrypi:~/E3dcGui $ sudo gcc --version
gcc (Raspbian 4.9.2-10) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Auch mit GCC 6 wird -m32 nicht verarbeitet:

pi@raspberrypi:~/E3dcGui $ g++-6 -O3 -m32 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o RscpMain
g++-6: error: unrecognized command line option ‘-m32’

Ist die Option vielleicht nur für x86 Anwendungen, wie Windows. Die E3dcGui Applikation wird von mir nur für den Raspberry Pi angeboten.

Bei den Optionen ist mir aufgefallen das ich "-O4" in den Makefile hatte, dies ist aber keine verwendbare Option. Im Code von E3DC wird "-O3" genutzt, ich habe das Makefile in V1.15 angepasst.

Danke für deine Hilfe!

Viele Grüße Nico

PS: ich hoffe es ist OK wenn ich auf deutsch Antworte. Englisch schreiben ist nicht meins!

RalfJL commented 8 years ago

Hallo Nico,

Offensichtlich ist der gcc auf Raspberry nicht so kompiliert, dass er unterschiedliche Bitbreiten unterstützt. Bei meinem CentOS z.B. liefert mein selbst übersetzter GCC ein: g++ -v Konfiguriert mit: ../gcc-4.9.3/configure --disable-multilib --enable-languages=c,c++,fortran

Also kein multilib, also kein 32Bit. Allerdings wirft erst der Linker einen Fehler. -m32 geht durch.

Der Standard Compiler, der bei CentOS 6.x dabei ist kompiliert Standard immer 64Bit. Das geht aber mit dem aktuellen AES.cpp nicht. Denn dann wäre ein unsigned long 8 Byte, bei 32 Bit nur 4 Byte. Besser wäre, wenn AES.cpp mit uint32_t arbeiten würde.

Egal. Witchtig ist hier einfach nur, dass auf 64Bit Betriebssystemen ein 32Bit Programm erzeugt werden muss. Und daher das -m32 Nur fällt mir momentan nichts ein, wie ich das ins Makefile "automatisch" hin bekommen würde.

Vielleicht hast Du ja noch eine Idee, wie man garantiert, dass das Rscp Programm mit 32 bit kompiliert wird. Auf 64Bit bekommst Du sonst garantiert einen core dump.

Viele Grüße

Ralf

Am 24.11.2016 um 21:16 schrieb nischram:

Hallo Ralf,

mien Compiler verarbeitet "-m32" nicht:

|pi@raspberrypi:~/E3dcGui $ make rm watchdog screenSave GuiMain start stop RscpMain Frame/touchtest g++ -O1 Watchdog.cpp -o watchdog cc -O1 screenSave.c -o screenSave cc -O1 GuiMain.c -o GuiMain cc -O1 start.c -o start cc -O1 stop.c -o stop g++ -O3 -m32 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o RscpMain g++: error: unrecognized command line option ‘-m32’ Makefile:24: recipe for target 'RscpMain' failed make: *** [RscpMain] Error 1 |

Meine Compiler Version ist:

|pi@raspberrypi:~/E3dcGui $ sudo gcc --version gcc (Raspbian 4.9.2-10) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |

Auch mit GCC 6 wird -m32 nicht verarbeitet:

|pi@raspberrypi:~/E3dcGui $ g++-6 -O3 -m32 RscpMain.cpp Rscp/RscpProtocol.cpp Rscp/AES.cpp Rscp/SocketConnection.cpp Rscp/RWData.cpp -o RscpMain g++-6: error: unrecognized command line option ‘-m32’ |

Ist die Option vielleicht nur für x86 Anwendungen, wie Windows. Die E3dcGui Applikation wird von mir nur für den Raspberry Pi angeboten.

Bei den Optionen ist mir aufgefallen das ich "-O4" in den Makefile hatte, dies ist aber keine verwendbare Option. Im Code von E3DC wird "-O3" genutzt, ich habe das Makefile in V1.15 angepasst.

Danke für deine Hilfe!

Viele Grüße Nico

PS: ich hoffe es ist OK wenn ich auf deutsch Antworte. Englisch schreiben ist nicht meins!

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/nischram/E3dcGui/issues/4#issuecomment-262839992, or mute the thread https://github.com/notifications/unsubscribe-auth/AOaec6Jnpt1-ou8Ch3qMKEYuat6K-nL3ks5rBfCYgaJpZM4K7psh.

-- Ralf Lehmann Angerhofstr. 15 D-82110 Germering Tel.: 0171/1245129 UstIdNr.: DE128151971

nischram commented 8 years ago

Hallo Ralf,

da ich kein Programmierer bin und mich erst seit diesem Projekt mit c und c++ beschäftige, bin ich hier überfragt. Meine Applikation ist von mir für den Raspberry Pi ausgelegt und auf diesen ist das Compilieren bislang fehlerfrei, somit lasse ich die Option "-m32" erst einmal raus. Ich werden diese Issue vorerst schließen, aber ggf. wieder starten wenn der Pi mehr mit 64Bit genutzt wird und es bei meiner Applikation zu Problemen kommt. Vielleicht bekomme ich zur gegebenen Zeit bei E3DC dazu eine Aussage oder Hilfe.

Ich danke dir trotzdem recht herzlich für deine Mithilfe.

Viele Grüße Nico

RalfJL commented 7 years ago

Hi,

zur Info. In meinem Github Projekt

https://github.com/RalfJL/S10history

befindet sich eine Version von AES.h und AES.cpp, die man auf 64Bit kompilieren kann.

Viele Grüße

Ralf

Am 27.11.2016 um 13:49 schrieb nischram:

Closed #4 https://github.com/nischram/E3dcGui/issues/4.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/nischram/E3dcGui/issues/4#event-872839230, or mute the thread https://github.com/notifications/unsubscribe-auth/AOaecxVUIuJI2FcUwCyxKip2w7V-2aIBks5rCXx2gaJpZM4K7psh.

-- Ralf Lehmann Angerhofstr. 15 D-82110 Germering Tel.: 0171/1245129 UstIdNr.: DE128151971

nischram commented 7 years ago

Hallo Ralf,

danke für deine Mithilfe und dein Feedback. Ich werde es bei Gelegenheit oder Bedarf mal testen.

Viele Grüße Nico

nischram commented 7 years ago

AES.h und AES.cpp von RalfJL mit Update 1.32 übernommen.

@Ralf: Danke!!!