En programmation C, j'ai pensé qu'un fichier objet peut être lié avec succès à un fichier .so tant que le fichier .so offre tous les symboles qui ont été déclarés dans le fichier d'en-tête. Supposons que j'ai foo.c, bar.h et deux bibliothèques libbar.so.1 et libbar.so.2. L'implémentation de libbar.so.1 et libbar.so.2 est totalement différente, mais je pense que c'est OK tant qu'ils offrent tous les deux des fonctions déclarées dans bar.h.Le programme a-t-il besoin de symboles supplémentaires de la bibliothèque partagée .so à l'exception de ceux déclarés dans le fichier d'en-tête?
J'ai lié foo.o avec libbar.so.1 et produit un exécutable: foo.bin. Cet exécutable a fonctionné quand libbar.so.1 est dans LD_LIBRARY_PATH (bien sûr, un lien symbolique est fait comme libbar.so) Cependant, quand je change le lien symbolique en libbar.so.2, foo.bin n'a pas pu fonctionner et s'est plaint :
undefined symbol: _ZSt4cerr
libbar.so.1 est une bibliothèque C++ construit, tandis que libbar.so.2 est une bibliothèque construite en courant alternatif. Je ne comprends pas pourquoi foo.bin a besoin de ces symboles liés à C++ seulement significatifs dans libbar.so.1 lui-même, puisque foo.bin est construit sur du code c pur foo.c.
Merci! C'est la discordance du compilateur. – solotim
Changé à une autre question: http://stackoverflow.com/questions/2371073/how-to-write-c-so-library-to-subsitute-existing-c-so-library – solotim