Angenommen, Sie haben zwei gemeinsame Bibliotheken, lib1.so und lib2.so, die beide statisch mit libcommon.a verknüpft sind. Würde sich der Compiler über eine mehrdeutige Symbolreferenz beschweren, wenn Sie sowohl lib1.so als auch lib2.so dynamisch verknüpfen würden? Oder wäre der Compiler klug genug zu wissen, dass libcommon Symbole zwischen lib1 und lib2 geteilt werden und es Ihnen erlauben, dynamisch gegen beide zu verlinken?Verknüpfung mit mehreren gemeinsam genutzten Bibliotheken, die alle mit einer gemeinsamen statischen Bibliothek verknüpft sind
Antwort
Die statische Bibliothek würde verwendet, um die Links intern aufzulösen, aber die externe Verknüpfung würde nicht an die Shared-Library-Schnittstelle weitergegeben werden, so dass es keinen Konflikt geben würde. Jede gemeinsam genutzte Bibliothek enthält eine eigene Kopie des statischen Bibliothekscodes.
Es wird keinen Konflikt geben, da der Linker beim Verbinden mit gemeinsam genutzten Bibliotheken die Definition aus der ersten gemeinsam genutzten Bibliothek verwendet, die das Symbol bereitstellt, und nicht weiter auf die anderen gemeinsam genutzten Bibliotheken schaut. Symbole, die aus der .a-Datei stammen, werden in beiden gemeinsam genutzten Bibliotheken exportiert, stehen jedoch nicht in Konflikt.
Das ist nicht wahr. Es gibt schwach exportierte Symbole und stark. Wenn eine Disambiguität zwischen stark besteht, liegt ein Fehler vor. – Trismegistos
Angenommen, die zwei gemeinsam genutzten Bibliotheken sind mit den verschiedenen statischen Bibliotheken verknüpft. Aber die statischen Bibliotheken enthalten beide eine Funktion mit demselben Namen. Es würde Konflikte geben.
Ich bin sicher, weil ich eine tcl/tk-Anwendung habe, lädt es zwei tcl-Bibliotheken (.so). Beide Bibliotheken sind statisch mit der openssl-Bibliothek verknüpft. aber mit anderer Version. Beim Ausführen der tcl-Anwendung ist ein Segmentierungsfehler aufgetreten. Ich führe es in das OpenSSL. In der neuen Version wurde eine Funktionsimplementierung geändert.
- 1. Wie sind globale Variablen in gemeinsam genutzten Bibliotheken verknüpft?
- 2. Verknüpfung mit statischen Bibliotheken
- 3. Größe der gemeinsam genutzten Bibliothek
- 4. Was wird bei der Verknüpfung mit einer gemeinsam genutzten Bibliothek zu einer ausführbaren Datei hinzugefügt?
- 5. Wo werden Variablen der gemeinsam genutzten Bibliothek gespeichert, wenn sie mit einer Anwendung verknüpft sind
- 6. Verbreitung von "-g" in gemeinsam genutzten Bibliotheken mit gcc
- 7. FFmpeg nicht kompiliert mit gemeinsam genutzten Bibliotheken
- 8. Aufruf einer gemeinsam genutzten Bibliothek von C++
- 9. Xcode teilt keine statische Variable mit einer gemeinsam genutzten Bibliothek
- 10. Eine statische Bibliothek während des Builds mit einer gemeinsamen verknüpfen?
- 11. Verknüpfung von statischen Fortran-Bibliotheken mit Abhängigkeiten
- 12. Websphere: Konfigurieren einer gemeinsam genutzten Bibliothek mit Deployment-Deskriptoren
- 13. Verknüpfung mit statischen und dynamischen Bibliotheken in MSVC
- 14. eine gemeinsame Bibliothek mit Statik Verknüpfung CMake mit
- 15. Wie mit Abhängigkeiten in gemeinsam genutzten Bibliotheken umgehen, Unix
- 16. Wie gcc mit einer gemeinsam genutzten Bibliothek kompilieren?
- 17. Linux beherbergt mehrere Versionen einer gemeinsam genutzten Bibliothek, aber was ist mit?
- 18. gcov: Ausgabe von .gcda aus einer gemeinsam genutzten Bibliothek erzeugen?
- 19. Wie man gdb Drucksymbole in gemeinsam genutzten Bibliotheken macht, die mit dlopen geladen sind?
- 20. Verlinkung zu einer gemeinsam genutzten Bibliothek, die zu einer anderen gemeinsam genutzten Bibliothek führt segFaults beim Beenden
- 21. CMake: Verknüpfung statisch gegen libgcc und libstdC++ in einer gemeinsam genutzten Bibliothek
- 22. Wie verkleinern Sie die Größe einer gemeinsam genutzten Bibliothek?
- 23. Memcached in einer vertrauenswürdigen gemeinsam genutzten Umgebung?
- 24. Benötige ich statische Bibliotheken zur statischen Verknüpfung?
- 25. Speicherkarte von einer gemeinsam genutzten Bibliothek in Linux
- 26. Verknüpfen einer gemeinsam genutzten Bibliothek mit einer statischen Bibliothek: Muss die statische Bibliothek anders kompiliert werden, als wenn eine Anwendung sie verknüpfen würde?
- 27. Wie Laufzeit gemeinsam genutzte Bibliotheken debuggen?
- 28. Wann bestimmte Optimierungen wie -fwhole-program und -fprofile-generate mit mehreren gemeinsam genutzten Bibliotheken zu verwenden sind
- 29. valgrind - Speicherleck in einer gemeinsam genutzten Bibliothek finden
- 30. Debugging/Tracing in einer gemeinsam genutzten Bibliothek zur Laufzeit?
Zumindest unter GNU/Linux, wenn ich eine shared library (.so) erstelle, die eine Verbindung zu einer statischen Bibliothek (.a) herstellt, kann ich auf jedes der aus der statischen Bibliothek gezogenen Symbole von einem ausführbaren Link zugreifen Ich bin mir ziemlich sicher, dass die Symbole aus der statischen Bibliothek _are_ an die gemeinsame Bibliothek weitergegeben werden. Vielleicht funktionieren die Dinge auf einigen anderen Systemen anders, aber die meisten Systeme, mit denen ich gearbeitet habe, sind bei den Standard-Linker-Optionen der Fall. –
@Jay Walker: Für was es wert ist, bevorzugte ich Ihre Antwort. Unabhängig von den Mechanismen ist die grundlegende Wahrheit, dass keine Konflikte auftreten werden. – Clifford