Ich habe eine main.exe und zwei Bibliotheken (lib1 und lib2):Gibt es eine Möglichkeit, ungenutzte Bibliotheken beim Linken zu überspringen?
In main.exe:
extern void f3();
int main() {
f3();
}
In lib1.cpp:
extern void f4();
void f2() {
f4();
}
void f3() {
}
In lib2.cpp:
void f4() {
}
So theoretisch, ich brauche nur lib1 main.exe erfolgreich zu bauen, weil nur f3()
wird von main()
aufgerufen.
Allerdings habe ich sowohl unter gcc und MSVC gefunden, ich muss auch lib2 haben, sonst Linker meldet es kann f4()
nicht finden.
Ich habe Linker Flag --as-needed
versucht, aber es hilft nicht. Meine Frage ist also: Gibt es eine Möglichkeit (z. B. Linker-Flags), die ich verwenden kann, um main.exe erfolgreich ohne lib2 zu erstellen? Angenommen, ich kann keinen C++ - Quellcode ändern.
Die kurze Antwort ist: Nein, gibt es nicht. –
Angenommen, Sie verknüpfen statische Bibliotheken, wenn der Linker mit lib1 verbindet und sieht, dass er f4 aufruft, wird er versuchen, lib2 zu verknüpfen. Ich denke du brauchst beides. – Dan
Ich denke, das Objekt Dateiformat zeigt nicht alle Abhängigkeiten an, so dass es zur Verbindungszeit nicht sagen kann, dass 'f4' nicht reacable ist. – Barmar