"pragma weak" fuer Funktionen in anderen Uebersetzungseinheiten?
-
Hey,
leider ist meine alte Frage im Zuge von den Serverproblemen verloren gegangen, deshalb stelle ich sie einfach nochmal^^.
Folgendes Problem:
// Modul_A.c #include "Modul_B.h" void foo(void) { func(); }
// Modul_B.h extern void func(void);
// Modul_B.c // Dieses Modul wird nicht immer mitgelinkt #include "Modul_B.h" void func(void) { //Implementierung von func }
Wie im Kommentar von
Modul_B.c
erwähnt, wird dieses niht immer dazu gelinkt - natürlich würde dies in meinem Beispiel einen Fehler verursachen. Abhilfe schafft hier das#pragma weak
.
Das heisst mit folgendem Quelltext würde es funktionieren:// Modul_B.h extern void func(void); void dummy_func() {} #pragma weak func=dummy_func
Mein Problem ist nun, dass ich die Zuweisung des
#pragma weak
(oder einer Ähnlichen Direktive) Zentral in einem C-File machen will. Dies hat den Grund, dass ich an einem vorhandene Code-Projekt arbeite, welches ca. 200 solcher Weak-Funktionen hat. Diese wurden über ein Assembler Makro weak deklariert:// weakfuncs.c #define WEAK(x,y) __asm__(".weak " #x "\n.set " #x "," #y "\n"); void dummy_func() { } WEAK(func,dummy_func)
Dieses Makro funktioniert bei dem MinGW GCC 3.4.4 für das PowerPC target, d.h. obwohl das weak-Attribut in einer separaten Kompilierungseinheit definiert wurde, kann es dem Linkre mitteilen dass die Funktionen weak sind.
Für mein Kompilat benuze ich den MinGW GCC 4.8.1 für ein x86 target. - Zwar kompiliert das oben genannte Makro, jedoch erhalte ich dann bei den betroffenen Funktionen immer noch einen "Undefined Reference"-Fehler.
Long Story short: Kann ich irgendwie in einem eigenen C-File / in einer eigenen Kompilierungseinheit das Weak-Attribut für Funktionen anderer C-Files setzen?
Beste Grüße
Flipp
-
Oh Gott, irgendwie hat mein Browser beim Posten den Betreff verschluckt und da ich es als nicht registrierter Benutzer geschrieben habe kann ich es auch ncih mehr ändern...I'm sorry...
-
Flipp147 schrieb:
Oh Gott, irgendwie hat mein Browser beim Posten den Betreff verschluckt und da ich es als nicht registrierter Benutzer geschrieben habe kann ich es auch ncih mehr ändern...I'm sorry...
Ich glaube, das ist eher ein Problem des Forums. In vielen Unterforen scheint der neueste Beitrag nach dem Crash keinen Titel zu haben. Welchen Titel würdest du dir vorstellen? Ich könnte ihn dann reineditieren.
edit: Nein, kann ich anscheinend nicht. Mein edit des Titels wird einfach ignoriert. Wenn du zu wenig Resonanz bekommst wegen des doofen Threadtitels, dann solltest du vielleicht einfach noch einen weiteren Thread aufmachen. Ja, ist doof für dich, aber dies ist im Moment eine einmalige Sondersituation aufgrund des (nun behobenen) Problems mit der Forensoftware.
edi2: An den Umlauten liegt's. Ich habe mal einen passenden Titel genommen.