Varrius Geschrieben 26. Juli 2004 Geschrieben 26. Juli 2004 Hi, ich soll gerade in einem Projekt aus mehreren .c Dateien eine shared librarie mit der Endung .so erstellen. Ich hab auch schon ein wenig gegoogelt, leider nur komische Befehle gefunden, mit denen ich nichts anfangen konnte hier ein paar Beispiele: gcc -fPIC -c xxx.c xxy.c ld -shared -soname yyy.so -o yyy.so xxx.o xxy.o gcc x.o -L . -lfb ich hoffe ihr könnt mir helfen Varrius Zitieren
Guybrush Threepwood Geschrieben 26. Juli 2004 Geschrieben 26. Juli 2004 Schau mal hier: http://vergil.chemistry.gatech.edu/resources/programming/c-tutorial/libraries.html Zitieren
nic_power Geschrieben 26. Juli 2004 Geschrieben 26. Juli 2004 gcc -fPIC -c xxx.c xxy.c Damit wird eine Objektdatei aus dem Quellcode erzeugt, welche "Position Independent Code" ("PIC") enthält. Dies ist notwendig, um eine Shared Library an eine beliebige Stelle im Speicher laden zu können. ld -shared -soname yyy.so -o yyy.so xxx.o xxy.o Damit wird eine Shared-Library mit dem Namen "yyy.so" aus den Objektdateien "xxx.o und xxy.o" erzeugt und in der Shared-Lib "yyy.so" abgespeichert. gcc x.o -L . -lfb damit linkst Du die Library "fb" (mit dem Namen "libfb.so" bzw. "libfb.a"), welche sich im aktuellen Verzeichnis befindet ("-L.") zu einer Objektdatei mit dem Namen "x.o". Wobei hier eigentlich noch der Name des Programms mit angegeben werden sollte: "gcc -o program x.o -L. -lfb" Nic Zitieren
Varrius Geschrieben 27. Juli 2004 Autor Geschrieben 27. Juli 2004 k, das hab ich nun ein wenig verstanden aber wo muss ich diese befehle eingeben, beim "cmd" kennt er die befehle nicht oder muss ich die unter linux oder unix machen :confused: Zitieren
nic_power Geschrieben 27. Juli 2004 Geschrieben 27. Juli 2004 Hallo, üblicherweise unter Linux/Unix mit einem installierten gcc (Gnu C-Compiler). Alternativ sollte das auch unter Windows funktionieren, wenn Du "cygwin" als Entwicklungsumgebung installiert hast (http://www.cygwin.com). Nic Zitieren
Varrius Geschrieben 28. Juli 2004 Autor Geschrieben 28. Juli 2004 k, das kriegen wir schon hin das problem ist, wir haben eine .so-datei und wollen diese erneuern, finden aber irgendwie die datei zum erstellen nicht (also die .c dateien) besteht die möglichkeit eine solche datei zu "dekompilieren" ? Zitieren
Klotzkopp Geschrieben 28. Juli 2004 Geschrieben 28. Juli 2004 besteht die möglichkeit eine solche datei zu "dekompilieren" ? Nur sehr begrenzt. Das ist ungefähr so, als ob du aus einem Hamburger die Kuh rekonstruieren wolltest. Zitieren
Varrius Geschrieben 30. Juli 2004 Autor Geschrieben 30. Juli 2004 ich hab den burger mal gegessen und die kuh tod sein lassen nein, wir konnten nun nachvollziehen, wie diese .so erstellt wurde, da wir ein nettes script gefunden haben das problem ist nun, das die neue .so datei von 2,6 auf 2,1 MB "schrumpft" ist, sprich als die datei vor 2 jahren erstellt wurde war sie 2,6MB und heute war sie nur 2,1MB kann das an den seit damals verbesserten compilern liegen? da sich die dateien eigentlich nicht geändert haben dürften bzw. weg sind, da das mit clearcase nachzuvollziehen wäre, wir aber nix gefunden haben Zitieren
nic_power Geschrieben 3. August 2004 Geschrieben 3. August 2004 Hallo, das kann an vielen Dingen liegen. Eine Möglichkeit ist, dass ihr den Quellcode 1x mit Debugging-Informationen und 1x ohne diese erstellt (compiliert) habt (Compiler-Switch "-g"). Nic Zitieren
Timon Geschrieben 4. August 2004 Geschrieben 4. August 2004 kann das an den seit damals verbesserten compilern liegen? da sich die dateien eigentlich nicht geändert haben dürften bzw. weg sind, da das mit clearcase nachzuvollziehen wäre, wir aber nix gefunden haben Kann es durchaus. Aktuelle Versionen des GCC haben ziemlich gute Optimierungen in Richtung Dead-Code-Elimination und Schleifenoptimierung. Zwar ist eine Reduzierung um knapp 20% schon sehr aussergewoehnlich, aber nicht ausgeschlossen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.