[C++, GCC] Linker linkt... selektiv irgendwie
Verfasst: 25.02.2015, 19:02
Moin,
ich habe gerade ein nur moderat spannendes Problem mit Splatter auf Linux. Inzwischen kompilieren alle statisch gelinkten Bibliotheken durch und produzieren .a-Dateien. Die gebe ich dann im exe-erstellenden Projekt an. Die Kommandozeile sieht stark gekürzt in etwa so aus:
Sorry für die Länge, aber ich habe irgendwie das Gefühl, dass es daran liegt. Da fehlen auf jeden Fall noch externe Libs, wie z.B. FMod. Das Problem ist aber, dass das Linker nicht nur FMod-Symbole vermisst, sondern auch anscheinend wahllos Symbole anmeckert, die auf jeden Fall in den Libs vorkommen. Ich habe mir z.B. mit nm alle Symbole einer der .a-Dateien angeschaut und finde dort alle Sachen, die da sein sollten. Aber einige davon werden nicht angemeckert, andere Sachen dagegen bekomme ich mit "Undefined reference to..." um die Ohren gehauen. Das banale -lX11 z.B. wird verarbeitet, Vertipper bekomme ich mit FileNotFound vorgeworfen, aber jede X11-Funktion ist "Undefined Reference".
Und richtig seltsam wird es zwischendurch, wenn der Linker eine Funktion aus einer der mitgebauten Libs findet und linkt, aber eine statische Konstante aus derselben Klasse nicht findet. Also beispielhaft so:
Und der Linker verlinkt die Funktion Bla::TuWas() sauber und ordentlich, aber die darin verwendete Bla::Konstante findet er plötzlich nicht mehr. Spätestens an der Stelle bin ich einfach nur noch ratlos.
Hat irgendwer von euch eine Idee? Umgebung ist eine 32Bit-VM mit Ubuntu 14.10 und GCC 4.9.1 oder so.
ich habe gerade ein nur moderat spannendes Problem mit Splatter auf Linux. Inzwischen kompilieren alle statisch gelinkten Bibliotheken durch und produzieren .a-Dateien. Die gebe ich dann im exe-erstellenden Projekt an. Die Kommandozeile sieht stark gekürzt in etwa so aus:
Code: Alles auswählen
g++ -o ../../Splatter/Spiel_debug
// Object Files des Executable-Projekts
../../obj/Spiel.pro_debug/ArcadePauseMenu.o ../../obj/Spiel.pro_debug/ArcadeSurvivalModus.o ...usw...
// prebuilt libs
/home/ulf/projekte/Splatter/Source/Spiel/../../SourceExt/Extern/boost/lib/libboost_filesystem.a ...usw...
// globale Deps
-lpthread -lX11
// vorher in anderen Projekten gebaute Libs
/home/ulf/projekte/Splatter/Source/Spiel/../../libs/libangelscript.pro_debug.a
Und richtig seltsam wird es zwischendurch, wenn der Linker eine Funktion aus einer der mitgebauten Libs findet und linkt, aber eine statische Konstante aus derselben Klasse nicht findet. Also beispielhaft so:
Code: Alles auswählen
class Bla {
static const size_t Konstante = 0x3fffffff;
void TuWas() { MachWoanders( Konstante); }
}
Hat irgendwer von euch eine Idee? Umgebung ist eine 32Bit-VM mit Ubuntu 14.10 und GCC 4.9.1 oder so.