Segmenation Fault Error

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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.