Ich habe folgende Situation bei der Verwendung GCC: Wie kann man eine Bibliothek statisch verknüpfen, die dynamisch eine andere Bibliothek verknüpft?
Ich habe eine dynamische Bibliothek mit dem Namen A.DLL, die korrekt und Links stellen zusammen und bilden LIBA.A.
Nun, ich habe eine andere statischen Bibliothek mit dem Namen LIBB.A, die eine Funktionsdefinition hat, dieafunc()
von A.DLL verwendet. Dies kompiliert und verbindet auch korrekt und erzeugt LIBB.A.
Jedoch, wenn ich bin mit LIBB.A in einem anderen Programm PROGC.C an das ausführbare Programm PROGC.EXE, GCC verknüpfen können nicht mit LIBA.A zu A.DLL zu kompilieren.
Es gibt den Fehler: undefined reference to afunc()
.
Ich versuchte Art der folgenden Aktionen ausführen:
gcc PROGC.C -o PROGC.EXE -lLIBB.A -Wl,-Bdynamic -lLIBA.A ...
Aber nichts funktioniert erfolgreich zu verknüpfen.
Meine Frage ist, ob das überhaupt möglich ist? Wenn ja, wie geht das? Wenn nein, warum nicht?
(. Vielen Dank im Voraus)
vielleicht verwenden Sie nicht die gleiche Aufrufkonvention !!! – milevyo
Wie hast du deine libb.a gebaut? – jdarthenay
@jdarthenay Ich benutze folgendes um libb.a zu erstellen: 'gcc.exe ... -c B.c -o B.o' und' ar.exe -r -s LIBB.A B.o '. Wie von @milevyo gefordert, verwende ich jedoch keine explizite Aufrufkonvention in einer der Bibliotheken. Ist das ein Problem? P.S. Ich baue alles mit dem gleichen Compiler. –