» »

Prevajanje & Prenosljivos programja

Prevajanje & Prenosljivos programja

webblod ::

Če napišem programček v ANSII C-ju (tukaj ne govorim o VC++ ali BCC, itd.), recimo tipičen "Hello world" programček, in ga z enim izmed prevajalnikov prevedem, zakaj ta programček preveden v Windows okolju ne deluje v Linux okolju in obratno.

Če slučajno nisem dovolj jasen... Ko nekdo napiše npr. operacijski sistem, ga mora prevesti... In ta OS se potem zažene sam, oz. je odvisen zgolj od strojne platforme in ne od tega, kje je bil preveden...

Mi zna torej kdo razložiti, v čem je tukaj trik??? Kako naj torej napišem (enostaven, npr. Hello world) program, ki bo delal na x86 (strojni) platformi, ne glede na to, kateri OS je naložen na to računalo????
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

morphius ::

Cja platformsko neodvini programski jezik je le Java(interpretiran)...mogoče še kaki drugi, samo C/C++ 100 posto ni...tak da upam, da ti je to nekak odgovor, zakaj ne gre.
Kaj se pa OS tiče ... jedro je napisano v assembler-u, višje stvari pa pol v (ansi) C/C++.
Sicer pa že tu ti je neke vrste odgovor, da ti linker v Windows generira exe kodo, tak da ...

Lp, morphius

webblod ::

Hmm... Torej... Kolikor vem, sta Java in C približno enako prenosljiva, saj Javini "class"-i so podobna zadeva kot C-jevi "obj"-i, če bi torej v računalnik prenesel obj datoteke in jih prevedel JIT, kot to počne Java Interpreter, potem bi tudi C-jevski programi bili platformsko neodvisni...

Vendar, moje vprašanje je, ali se da, in če se da, kako se da v C-ju napisati program, ki bo delal na x86 platformi, ga prevesti z "ustreznim" prevajalnikom z namenom, da bo ta program delal na obeh OS-ih?

Drugo, kar me zanima, pa so razlike... V končni fazi je treba tudi ASM prevesti... Zakaj torej tam ni platformske odvisnosti, v C-ju pa je? Kaj niso C Standardne Knjižnice povsod enake???
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

simon ::

Saj imas prav, strojne instrukcije so iste, problem je v tem da je format executable datotek razlicen (npr exe vs elf). To moznost (enaka strojna koda) uporabljata avifile in mplayer na linuxu, ki znata predvajati filme s pomocjo kodekov, ki so prevedeni za windows platformo (dll).

webblod ::

No, pa sem izvedel nekaj novega... čeprav sem to domneval, ampak... Je torej razlika v tistih prvih Byte-ih, kjer se nahajajo podatki o datoteki sami, ali je razlik še več...

"Inštrukcijski" del datoteke bi po moje moral biti v obeh izvršnih datotekah enak, saj gre za isto (oz. morebiti zaradi različne optimizacije prevajalnikov malenkost različno) strojno kodo... No vsekakor gre za isti set inštrukcij...

Sedaj pa k problemu... MS Windovs upravlja datoteke glede na končnice, NIX sistemi pa glede na prvih, mislim da 32 Byte-ov, ki opisujejo datoteko (FileMagic, ali kako se temu že reče)...

Ali je torej razlika samo v t.i. FileMagic-u (torej uvodnih Byte-ih), ali še kje?
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

Gandalfar ::

webblod: ti si pa full optimisticen..

zadevo se ponavadi resuje tako, da pac na vsaki platformi prevedes program.

Vem pa, da obstaja nek virus, ki zna tocno to kar ti zelis. Tocnega imena ne vem.

webblod ::

Hmmm... Glede na to, kako znamo biti glasni in polni znanj tukaj, se mi zdi zanimivo, da nihče ne da nobenega konkretnega odgovora... >:D

Torej ni nikogar, ki bi poznal strukturo datoteke-programa??? 8-O

Zanimivo pa se mi zdi, da še nihče ni napisal cross-platform prevajalnika za C ... Pravzaprav se mi zdi to skoraj nemogoče... V končni fazi, s čim pa so napisali prve OS-e? Verjetno so jih prevajali, vsaj po moje no... In zelo težko so ga prevedli na OS-u, ki so ga pisali, ker ga enostavno še ni bilo... Ali pa so morda najprej napisali prevajalnik? :\

Po moje mora obstajati način... Dajmo malo glave skupaj!!! ;)
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

napsy ::

webblod: :D Če iščeš multi-platform prevajalnik, si poglej gcc. Glede operacijskih sistemov natančno ne vem, ker še nobenga nism delu:D, vem pa da se začne nekje pri boot loaderju, kernelu in da je nekaj kode(osnovno) kernela napisano v zbirniku.

Če si pa tako zagrize na pravo multi-platform programiranje, si pa oglej c# ali pa Javo
"If you die, you die. But when you live you live. There is no time to waste."

Zgodovina sprememb…

  • spremenil: napsy ()

mnlkpo ::

webblod: saj so nacini ja :). ok, nisem expert za te stvari, zato govorim precej okvirno (torej naj me kdo popravi in kaj doda:).

razlika med prevedeno kodo na razlicnih sistemih je predvsem v tem, kako so izvedene "visokonivojske" stvari - kot je naprimer funkcijski klic. torej kje so argumenti klicane funkcije (registri v procesorju, stack), kje je return value, kako se vrniti iz nje in kam. problemi nastanejo torej pri klicih med knjiznicami/programi, ki so prevedeni za drugacen standard. ali pa recimo, ali so res vsi podatkovni tipi (primitivni, strukture) enako obravnavani med razlicnimi prevajalniki?

potem je potrebno se obcasno narediti sistemske klice, kar se pocne drugace kot klici znotraj programa. ze recimo obicajen klic printf-a mora konec koncev za svoj output iti skozi sistem (jedro, drajvrji, etc.). na razlicnih sistemih je to realizirano ponavadi vsaj malo drugace. ok no, tale printf mogoce ni ravno najboljsi primer, ker sem se tukaj zadel ob prenosljivost standardne knjiznice :).

sicer je pa dober primer netbsd za binary "emulation".

--
ok, mogoce zgoraj nisem bil prevec prepricljiv, zakaj stvari niso tako preproste. zgornje probleme se da resiti brez pretiranega razmisljanja - hec je v tem, da programi, ki uporabljajo samo libc niso nevemkako uporabni :). recimo ze cisto osnovne stvari, kot so procesi, threadi, file descriptorji, socketi in se malo morje drugih stvari deluje dovolj drugace na winsih, kot pa na unixih, da lahko kar pozabis kompatibilnost. tudi prenosljivost threadov med unixi je zgodba zase :).

Zgodovina sprememb…

  • spremenilo: mnlkpo ()

Eschelon ::

Namesto koga google cveti?

EXE format

ELF format

Plus - odgovori na vprašanje: "Čemu služi operacijski sistem?" - Klik!

Prijetno branje.

Eschelon ::

.mnlkpo - ... kaj drugega kot tvoj link res ne rabi :D

webblod ::

napsy: Hmmm ... Po kateri logiki pa je C# cross olatform??? saj ne teče na Linuxu? Ali pač? :\
There must be a reason, why I'm so damn dissapointed on M$ Visual Basic
WEBblod.NET :: Slovenska programerska scena

Gandalfar ::

webblod: seveda tece.. pod MONO projektom..


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Programski jezik za vse operacijske sisteme (strani: 1 2 )

Oddelek: Programiranje
7216271 (13595) Grumf
»

Pri Facebooku napisali svoj PHP prevajalnik (strani: 1 2 )

Oddelek: Novice / Zasebnost
5316279 (13782) nodrim
»

Najhitrejši programski jezik? (strani: 1 2 )

Oddelek: Programiranje
757714 (5534) Senitel
»

[Java] Zagon brez instalirane Jave

Oddelek: Programiranje
181829 (1567) noraguta
»

Visual Basic, C#, C++, razlike... (strani: 1 2 3 )

Oddelek: Programiranje
12212611 (10282) 64202

Več podobnih tem