Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » GNU/Linux » kompatibel kompilieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.11.2003, 18:16 Uhr
kronos
Quotenfisch
(Operator)


hi!
wie muss ich mit gcc kompilieren, damit eine linux-binary mit sicherheit auf einem anderen linux-system lauffähig ist?
ich habe gerade überhaupt keine zeit zum recherchieren und brauche das bis morgen, bitte helft mir!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.11.2003, 19:37 Uhr
Pablo
Supertux
(Operator)


Du erstellt die c bzw. cpp Dateien (ohne main) und musst du mit -shared kompilieren.

Di Libraries unter Linux haben einen bestimmen namen: libname_der_library.so.

Guck dir die Variable LD_LIBRARY_PATH. Diese Datei muss sich in einem der Verzeichnisse befinden, sonst kann Linux die Library nicht öffnen. Du kannst auch immer von dem selben Verzeichnis ausführen lassen, aber du musst vorher

Code:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:dein_path


ausführen.

Um Dateien damit zu kompilieren, muss du -lname_der_library benutzen, es wäre auch gut -LpathderLibrary zu benutzen und -fpic auch.

Bsp:

C++:
//mylib.c
#include <stdio.h>
void print(const char* text)
{
    if(text==NULL) return;
    printf(text);
}


Um zu kompilieren:

Code:
$ gcc -olibmylib.so -shared mylib.c




C++:
//test.c
#include <stdio.h>
int main()
{
    printf("Das wird von printf in main ausgeführt.\n");
    print("Und das von der Library\n");
    return 0;
}



Um das zu kompilieren:

Code:
$ gcc -fpic -otest test.c -lmylib -L.


(Nicht den Punkt nach -L vergessen!)

Um auszuführen:

Code:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
$ ./test


(Nicht den Punkt nach : vergessen!)
Ausgabe

Code:
[b]
Das wird von printf in main ausgeführt.
Und das von der Library[/b]


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 16.11.2003 um 19:38 Uhr von Pablo Yanez Trujillo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.11.2003, 20:09 Uhr
kronos
Quotenfisch
(Operator)


hi!
danke für die antwort!! ich bin aber nicht sicher ob das genau mein problem trifft. ich möchte ein programm so kompilieren, dass ich sicher sein kann, dass es auf (fast) jedem linux-rechner läuft. ich weiß halt nicht genau in wieweit gcc das programm für _mein_ system optimiert und ob es da irgendwas zu beachten gibt... ??
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
16.11.2003, 20:25 Uhr
Pablo
Supertux
(Operator)


Ach so, ich hab gedacht, du wolltest Librerien kompilieren.
Ich glaube das hängt vom Kernel und nicht vom gcc. Wenn du einen neunen Kernel backst, kannst du beim make eingeben, ob du binaries von anderen UNIX Systeme ausführen willst oder nicht.

In Pool der Mathe. Fakul. meiner Uni läuft Debian und Binaries, die ich in meinem SuSE erstelle, kann ich dort einwandfrei ausführen. Aber in Pool der Inform. Fakultät kann ich das nicht, es kommt immer sowas wie "unrecognizied binary file" oder so. Dort läuft Solaris.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
16.11.2003, 22:52 Uhr
0xdeadbeef
Gott
(Operator)


Solange du keine prozessorabhängigen Compileroptimierungen mitgibst (wie z.B. -march=athlon), kompiliert der gcc den Code so, dass er auf jeder Plattform ab dem 386er läuft. Naja, jeder x86-kompatiblen - auf nem Apple wird das Ding wohl nicht laufen, weil der ne ganz andere Architektur benutzt. Das wird auch der Grund sein, warum Pablos binaries auf der Solaris-Kiste nicht laufen; aller Wahrscheinlichkeit nach wird das ne SPARC sein, und die ist zum x86 einfach nicht kompatibel.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.11.2003, 22:57 Uhr
Pablo
Supertux
(Operator)


Das ist es, ich habe nicht daran gedacht, dass diese Solaris in Sun Stations installiert sind Ich mag diese Solaris Kisten nicht besonders, aber immerhin besser als Windoof!
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.11.2003, 15:26 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
0xdeadbeef postete
Solange du keine prozessorabhängigen Compileroptimierungen mitgibst (wie z.B. -march=athlon), kompiliert der gcc den Code so, dass er auf jeder Plattform ab dem 386er läuft. Naja, jeder x86-kompatiblen - auf nem Apple wird das Ding wohl nicht laufen, weil der ne ganz andere Architektur benutzt. Das wird auch der Grund sein, warum Pablos binaries auf der Solaris-Kiste nicht laufen; aller Wahrscheinlichkeit nach wird das ne SPARC sein, und die ist zum x86 einfach nicht kompatibel.

aha, thx. und wie sieht das z.b. bei grafischen tool-kits à la SDL, GTK o.ä. aus? die werden ja sicher optimiert? oder kann ich einfach zu meinem programm die shared libraries dazupacken die es benötigt?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
18.11.2003, 15:31 Uhr
0xdeadbeef
Gott
(Operator)


Wenn die entsprechenden Libraries im Linkerpath sind, läuft das Programm. Das ist der Sinn von shared libraries.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
18.11.2003, 17:12 Uhr
kronos
Quotenfisch
(Operator)



Zitat:
0xdeadbeef postete
Wenn die entsprechenden Libraries im Linkerpath sind, läuft das Programm. Das ist der Sinn von shared libraries.

alles klar, danke!
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ GNU/Linux ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: