In C-Programmierung dachte ich, dass eine Objektdatei erfolgreich mit einer .so-Datei verknüpft werden kann, solange die .so-Datei alle Symbole bietet, die in der Header-Datei deklariert wurden.Benötigt das Programm zusätzliche Symbole aus .so shared library außer den in der Header-Datei deklarierten?
Angenommen, ich habe foo.c, bar.h und zwei Bibliotheken libbar.so.1 und libbar.so.2. Die Implementierung von libbar.so.1 und libbar.so.2 ist völlig anders, aber ich denke, es ist in Ordnung, solange beide Funktionen anbieten, die in bar.h deklariert sind.
Ich verknüpfte foo.o mit libbar.so.1 und produzierte eine ausführbare Datei: foo.bin. Diese ausführbare Datei hat funktioniert, als libbar.so.1 in LD_LIBRARY_PATH ist. (Natürlich wird eine symbolische Verbindung als libbar.so hergestellt.) Wenn ich jedoch die symbolische Verbindung zu libbar.so.2 ändere, konnte foo.bin nicht ausgeführt werden und hat dies gemeldet :
libbar.so.1 ist eine C++ gebaute Bibliothek, während libbar.so.2 eine eingebaute Bibliothek ist Ich verstehe nicht, warum foo.bin diese C++ verwandten Symbole nur in libbar.so.1 selbst sinnvoll einsetzen kann, da foo.bin auf reinem c Code foo.c.
Vielen Dank! Es stimmt nicht mit dem Compiler überein. – solotim
Geändert zu einer anderen Frage: http://stackoverflow.com/questions/2371073/how-to-write-c-so-library-to-subsitere-existing-c-so-library – solotim