Forum: Mikrocontroller und Digitale Elektronik Segmenation Fault Error


von Bernd S. (mms)


Lesenswert?

Hallo,


kann man unter Windows Programme erstellen die auch unter Linux 
gestartet werden können?
1
#include <string.h>
2
#include <stdlib.h>
3
#include <stdio.h>
4
5
int main()
6
{
7
    printf("test"); 
8
    while(1);
9
}

Hab dieses Prog unter Windows kompiliert mit GNU (cygwin installiert) 
und anschließend das resultierende elf-File auf einen Linux-Rechner 
gepackt. Beim Ausführen dieser Datei gab es dies Fehlermeldung:

"Segmentation fault": wenn ich das printf() rausnehme, läuft die Datei 
bzw. das Programm unter Linux.

Weiß jmd zu diesem Verhalten etwas genaueres?

Gruß
Bernd

von faustian (Gast)


Lesenswert?

Sanity check: Was sagt denn ldd auf linux zu dem binary?

von Peter (Gast)


Lesenswert?

das geht doch nicht, man müsste es mit einen cross-compiler machen dafür 
braucht man dann auch alle libs von dem linux system auf dem windows 
system.

von Hc Z. (mizch)


Lesenswert?

Du kannst nicht erwarten, dass ein für Windows kompiliertes Programm auf 
Linux läuft.  Wie auch?  Die Laufzeitumgebung ist eine ganz andere. 
Cygwin ist schließlich nicht Linux und kein Cross-Compiler, sondern ein 
paar Unix-Tools für Windows.

Vielleicht bekommst Du es mit wine zum Laufen, aber bloß weil etwas mit 
cygwin erstellt wurde, ist es noch lange kein Linux-Programm.  Die 
Cygwin-exes kannst Du schließlich auch nicht einfach unter Linux 
starten.

von Bernd S. (mms)


Lesenswert?

welchen cross-compiler gibt es denn für windows und arm-linux? Reicht es 
wenn man GCC und die Binuitls installiert?

von Karl H. (kbuchegg)


Lesenswert?

Da scheint ein Missverständnis vorzuliegen.

Ein Cross-Compiler ist ein Compiler, der auf Betriebssystem A läuft und 
ein EXE für Betriebssystemm B erzeugt. Dieses B-EXE ist in der Regel 
nicht auf A ausführbar.

Das liegt schon alleine daran, dass es unzählige Möglichkeiten gibt, wie 
man die Kommunikation eines Programms mit dem BS (das sog. API) 
implementieren kann. Und immer dann, wenn es mehrere Möglichkeiten gibt, 
kann man davon auch ausgehen, dass sie alle von irgendjemanden benutzt 
werden. C abstrahiert davon ein gemeinsames Subset und verlagert die 
Details in die Runtime Library. Aber nur weil man diese Details so nicht 
mehr sieht, heißt das nicht, dass sie nicht mehr existent sind.


Man kann mit einem Cross-Compiler das System A benutzen um damit ein EXE 
für System B zu erzeugen. Das kann zb dann sinnvoll sein, wenn man auf A 
eine wesentlich bessere Entwicklungsumgebung zur Verfügung hat, als es 
auf B jemals möglich sein wird. Oder aber in der Bootstrap-Phase, wenn 
die Systemumgebung auf B das erste mal hochgezogen wird. Anstatt auf 
niedrigsten Byte-Level arbeitet man dann mit einem komfortablen 
Editor/Entwicklungswerkzeugen auf A.

von Bernd S. (mms)


Lesenswert?

stellt Code-Sourcery ein entsprechenden Cross-Compiler dar für 
Windows-Plattform nach ARM-embedded-Linux?


Und hat jmd damit schon Erfahrungen sammeln können?

Gruß
Bernd

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.