[linux] programma compilen voor andere versie

Pagina: 1
Acties:

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Hallo allemaal,

Ik heb hier op een pc twee versies van linux staan; Red Hat 7.1 en een embedded versie. Deze laatste is dus heeeeel klein en heeft dus geen compiler (zoals gcc).

Nu wil ik een programmaatje compileren op die Red Hat linux en dat programmaatje uitvoeren op die embedded versie.

Ik heb het allombekende 'Hello World' geprobeerd, maar als ik dat uit ga voeren op die embedded linux, dat gaatie zeuren over de library (/lib/libc.so.6: version GLIBC_2.1.3)

Kan iemand mij vertellen of het mogelijk is om een gecompileerd programma op een ander linux systeem uit te voeren??

  • odysseus
  • Registratie: Augustus 2000
  • Laatst online: 10:01

odysseus

Debian GNU/Linux Sid

Op donderdag 23 augustus 2001 14:58 schreef RdeTuinman het volgende:
Nu wil ik een programmaatje compileren op die Red Hat linux en dat programmaatje uitvoeren op die embedded versie.

Ik heb het allombekende 'Hello World' geprobeerd, maar als ik dat uit ga voeren op die embedded linux, dat gaatie zeuren over de library (/lib/libc.so.6: version GLIBC_2.1.3)

Kan iemand mij vertellen of het mogelijk is om een gecompileerd programma op een ander linux systeem uit te voeren??
Volgens mij is dit in principe mogelijk, maar je zit met twee problemen:
• De embedded-versie heeft waarschijnlijk een ander type processor (d.w.z. geen x86 maar ARM of zo)
• De embedded-versie heeft waarschijnlijk andere software(-versies) draaien.

Voor probleem 1 is er de oplossing van het crosscompilen. Ik heb het zelf nooit geprobeerd (heb hier alleen Athlons), maar wat hij dan doet is een executable maken die door het andere platform geaccepteerd wordt. Ik weet niet precies voor welke platformen gcc allemaal kan crosscompilen, maar dat kan nooit lastig te vinden zijn.
Probleem 2 is wat problematischer. Je zult eerst moeten weten welke software er op de doelmachine draait. Vervolgens moet je daar de headers van te pakken krijgen (zijn waarschijnlijk gewoon bij RedHat verkrijgbaar). Vervolgens moet je zorgen dat hij bij het compileren de goede headers gebruikt. Dit zal wel een kleine programmeerkwestie zijn, neem ik aan. Echt moeilijk kan dat niet zijn, maar hoe het precies zit weet ik niet (ken praktisch geen C). Een tweede oplossing zou zijn om alle benodigde libraries statisch 'erin' te compileren. Alleen voor noodgevallen en de doelmachine heeft een stevige schijf nodig (dat worden ettelijke MB's voor je HelloWorld, vrees ik), maar het werkt wel...

Leven is het meervoud van lef | In order to make an apple pie from scratch, you must first create the universe.


  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Voorlopig staat die embedded versie nog op dezelfde pc en dus dezelfde processor, dus daar maak ik mij niet zo druk om...

En om idd die libraries te kopieren is ook geen doen en niet de bedoeling.. embedded is namelijk zo klein mogelijk.

Nou ben ik wel een beetje een newbie met linux, dus misschien begrijp ik je verkeerd, maar wat bedoel je precies met 'welke software er op draait' ??

Verwijderd

ik denk dat ie bedoelt welke libraries erop staan.

Verder zou je kunnen proberen om een soort emulatie erop tez zetten en hem dan onder het embedded system te compilreren

Verwijderd

Static compileren ? Ben je iig van library afhankelijkheid af. Je programma's worden dan wel een stukkie groter...

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Klinkt het erg lomp om te vragen wat static compileren is?

(Zo ja, dan hoef je niet te antwoorden.... :9)

Of neemtie dan de (of delen van) de libraray mee in de executeble...

  • Remenic
  • Registratie: Juni 2001
  • Laatst online: 09-08 20:06
Zelfs al ben ik pro linux, dit vind ik dus een typisch voorbeeld van hoe verneukt de library support in linux is... Zoiets had een maat van ook, die had een Apache + PHP + MySQL install. Hij isntalleerde een nieuwe versie van MySQL (niet eens zo'n grote versie stap btw), en hij kon meteen Apache ook opnieuwe bakken, omdat in PHP de MySQL DB niet benaderd kon worden. Dat is dus echt ZO kut he.

Schaam ik me eerlijk gezegd best wel een beetje voor. Kheb namelijk ook wel eens me libgif geupdate. Kon ik dus ook weer een hoop programma's opnieuw compileren omdat ze niet meer werkte...

*zucht*

  • Myrdhin
  • Registratie: April 2000
  • Laatst online: 08:45
Op donderdag 23 augustus 2001 16:59 schreef Remenic het volgende:
Zelfs al ben ik pro linux, dit vind ik dus een typisch voorbeeld van hoe verneukt de library support in linux is... Zoiets had een maat van ook, die had een Apache + PHP + MySQL install. Hij isntalleerde een nieuwe versie van MySQL (niet eens zo'n grote versie stap btw), en hij kon meteen Apache ook opnieuwe bakken, omdat in PHP de MySQL DB niet benaderd kon worden. Dat is dus echt ZO kut he.
Hij was toch niet vergeten om even een ldconfig te draaien zodat de dynamic linker weet welke libraries er zijn na de verandering??? Overigens als ie PHP als apache module had gemaakt had ie in het ergste geval alleen php opnieuw moeten compilen.

Verwijderd

je moet hem idd statisch compilen --enable-static ofzo? staat meestal bij het programma in de uitvoer van ./configure --help

je kan dan eventueel daarna nog strip gebruiken om de debugging zooi uit de executable te halen om hem zo wat kleiner te maken :)

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Ik het morgen weer proberen..

Jullie horen vast nog wel van mij :)

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Kan ik de libraries van die embedded versie gewoon kopieeren naar die redhat?? of moet er op de een of andere manier weer geconfigureerd/make/build enzo gedaan worden??

Mijn bedoeling is om de compiler (welke dus in Red Hat zit) de library te laten gebruiken van die embedded versie...

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

Zelfs al ben ik pro linux, dit vind ik dus een typisch voorbeeld van hoe verneukt de library support in linux is... Zoiets had een maat van ook, die had een Apache + PHP + MySQL install. Hij isntalleerde een nieuwe versie van MySQL (niet eens zo'n grote versie stap btw), en hij kon meteen Apache ook opnieuwe bakken, omdat in PHP de MySQL DB niet benaderd kon worden. Dat is dus echt ZO kut he.
ter info : Je kan meerdere versie van dezelfde lib geinstalleerd hebben.

Wees blij dat die check er in zit, anders crashed de zooi ipv een error te geven.

  • igmar
  • Registratie: April 2000
  • Laatst online: 29-06 18:56

igmar

ISO20022

Ik heb het allombekende 'Hello World' geprobeerd, maar als ik dat uit ga voeren op die embedded linux, dat gaatie zeuren over de library (/lib/libc.so.6: version GLIBC_2.1.3)
Het beste is static compilen. Dit doe je door de linker de optie -static mee te geven.

Als je programma geen al te rare zaken aanroept kun je dietlibc proberen, die is iets van 50 kb ofzo ipv een x aantal meg.

dietlibc staat ergens op freshmeat

  • RdeTuinman
  • Registratie: Mei 2001
  • Laatst online: 16-08 07:25
Op vrijdag 24 augustus 2001 11:44 schreef igmar het volgende:

[..]

Het beste is static compilen. Dit doe je door de linker de optie -static mee te geven.

Als je programma geen al te rare zaken aanroept kun je dietlibc proberen, die is iets van 50 kb ofzo ipv een x aantal meg.

dietlibc staat ergens op freshmeat
Ja bedankt, dat static compileren werkt idd. en als je daarna strip doet (van fkooman) wordt hij ook een stuk kleiner (het programma dan) :9
Pagina: 1