Nella programmazione in C, ho pensato che un file oggetto può essere collegato correttamente con un file .so purché il file .so offra tutti i simboli dichiarati nel file di intestazione.Il programma ha bisogno di simboli aggiuntivi dalla libreria condivisa .so eccetto quelli dichiarati nel file di intestazione?
Supponiamo di avere foo.c, bar.h e due librerie libbar.so.1 e libbar.so.2. L'implementazione di libbar.so.1 e libbar.so.2 è completamente diversa, ma penso che sia OK fintanto che entrambi offrono funzioni dichiarate in bar.h.
Ho collegato foo.o con libbar.so.1 e prodotto un file eseguibile: foo.bin. Questo eseguibile funzionava quando libbar.so.1 si trova in LD_LIBRARY_PATH. (Ovviamente un collegamento simbolico viene creato come libbar.so) Tuttavia, quando cambio il collegamento simbolico a libbar.so.2, foo.bin non può essere eseguito e si lamenta :
undefined symbol: _ZSt4cerr
libbar.so.1 è un C++ costruita biblioteca, mentre libbar.so.2 è la libreria ac costruito. Non capisco perché foo.bin abbia bisogno di quei simboli relativi al C++ solo significativi nello stesso libbar.so.1, dato che foo.bin è costruito su puro codice c foo.c.
Grazie! È una mancata corrispondenza del compilatore. – solotim
Modificato su un'altra domanda: http://stackoverflow.com/questions/2371073/how-to-write-c-so-library-to-subsitute-existing-c-so-library – solotim