Toon posts:

Verschil tussen source en binary?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Nieuwe proggies zijn vaak te downloaden in source of binarie formaat...Kan iemand me vertellen wat nu eigenlijk het grote verschil is tussen die twee....
(Na een jaar rommelen met linux zou ik dat eigenlijk al moeten weten...maar ja die rpm's zijn zo makkelijk - lijkt wel windows :) -

Verwijderd

Source = broncode = voor de mens leesbaar programma dat eerst gecompileerd moet worden om op te kunnen starten. Binaries = gecompileerd = uitvoerbaar zonder dat je zelf eerst de source moet compileren. Compileren is van een voor de mens leesbaar programma een voor de machine leesbaar programma maken door middel van een compiler. Is vereenvoudigd weergegeven maar in grote lijnen is dat het dacht ik zo :)

Verwijderd

Source:
code:
1
2
3
4
5
6
7
8
9
10
static void
cb_audio_volume_changed (GtkAdjustment *adj,
                 gpointer    data)
{
  GstRecorderUI *recorder = (GstRecorderUI *) data;

  gst_recorder_mixer_set_volume(recorder->recmix,
                      100 - gtk_adjustment_get_value(adj),
                      100 - gtk_adjustment_get_value(adj));
}

binary:
code:
1
<heleboel vage tekentjes>

De ene is voor de mens leesbaar, de andere voor de computer ;) En als ik dus een proggie maak compileer ik de source (dat wordt dan een binary) zodat ik het proggie kan executen :)

(bovenstaande code is van het nog niet gereleasede libgstrec en GstRecorder)

Verwijderd

Topicstarter
Als ik het goed begrijp zou ik dus een binarie - ongeacht mijn distributie en dus de locatie van mijn libraries - direct kunnen starten ??!!!

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Nee, dat is niet waar. Het feit of het binary is zegt helemaal niks over het feit of je nog libs nodig hebt of niet. Een programmeur schrijft code, dat is de source, en dat wordt omgezet in machinetaal, binary code.

Verwijderd

Topicstarter
M.a.w. een binarie moet nog wel verteld worden waar mijn libs e.d. zijn?? Hoe dan?

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
nee nee, ook dat niet, dat hangt er maar net van af of de binary static gecompiled is of niet. Als ie static gecompiled is, heeft ie helemaal geen libs meer nodig als het goed is.

Verwijderd

Topicstarter
Hmmm....
Dus een static compiled binarie heeft alle benodige libs 'zelf meegenomen''
Een shared compile binarie heeft geen libs bij zich en moet weten waar jouw libs zijn?

Betekent dit dat wanneer ik een staic compiled bin download ik deze direct kan gebruiken en een shared compiled bin moet ik nog 'hercompilen' o.i.d.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Je kan een bin niet hercompilen, je kan alleen source compilen. Ga anders eens een goede howto lezen, is vast wel ergens te vinden.

Verwijderd

Topicstarter
Sorry hoor.....Misschien ben ik blind..maar als ik een howto over dit onderwerp had gevonden op de mij bekende sites had ik deze vraag niet gesteld.....

Als je geen andere reply weet dan "lees de howto" zonder link o.i.d. schiet ik daar niet veel mee op.

Als iemand een link heeft waar het verschil uitgelegd wordt hou ik me van harte aanbevolen.

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Ik was een beetje kortaf, doordat het probleem zo triviaal is denk ik. Je kan source en binary niet echt vergelijken. Source is door een mens geschreven, en een compiler heeft dit omgetoverd tot door een bepaalde processor uitvoerbare code. Als je binary niet static gelinked is, moet je de juist libs zien te krijgen. Een recompile zit er niet in dan. Het verschil tussen static en dynamic linked heeft niet echt te maken met het verschil binary-source. Source is zegmaar de "bron" van waaruit een programma gemaakt wordt.
waar libraries staan, staat in /etc/ld.so.conf
* blaataaps vindt het verschil zo triviaal, dat het moeilijk uit te leggen is.

Verwijderd

Je kunt een binary dus wel starten, of je libs hebt of niet. Alleen zal een niet static gecompileerde binary melden dat ie libs nodig heeft als deze niet zijn te vinden. Shared libs staan in de directories die in je /etc/ld.so.conf staan. Die worden aan het systeem bekend gemaakt door het commando ldconfig. Als ze niet bekend zijn zal de binary ze niet kunnen vinden.

Verwijderd

Topicstarter
Dus...kortom..samenvatting...

Source kan ik gewoon compileren naar eigen inzicht

binarie...
- static heeft eigen libs bij zich en kan ik direct gebruiken ongecht de versie van mijn libs
- shared is afhankelijk van de libs die op mijn systeem zijn geinstallerd en moeten zonodig bijgewerkt worden

??

  • blaataaps
  • Registratie: Juli 2001
  • Niet online
Bijna, het is static vs dynamic, niet static vs shared, static binary heeft geen libs nodig, een dynamic bin heeft de shared libs nodig.

Verwijderd

shared betekent dat atruntime door de dynamische linker (ld) bepaalde libs samen met de binary worden geladen. Bij static binaries heb je geen libdependencies en hoef je dus ook geen extra libs te laden.

  • BezurK
  • Registratie: Juni 2001
  • Laatst online: 14-06 09:12
Je kan het vergelijken met bijvoorbeeld DirectX in windoze, als je een spel speelt heb je de librarie nodig, DirectX dus, maar zou je een spel MAKEN dan heb je de SDK nodig, onder linux vaak te herkennen aan de -DEVEL in de filename, meestal zijn die libs ook groter.

Rookworst zonder R is ook worst.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 14-08 23:03

Creepy

Tactical Espionage Splatterer

En als je de source hebt, kan het natuurlijk ook nog wel eens zijn dat je development libraries mist (dan wordt er vaak gezeurd dat de compiler verschillende .h files niet kan vinden.)

Dus zelfs als je de source hebt, kan het zijn dat je het programma niet kan compilen en runnen. Maar meestal staat in de README/INSTALL wel ergens welke libraries je nodig hebt om te kunnen compileren
edit:
In feite dus wat Bezurk ook zei.. pff.. vermoeiend zo'n vrijdag middag :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1