Segmenation Fault Error

OP #1510266
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
#1510292
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.
#1510321
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren