Ich habe ein einfaches Server-Programm mit Socket-Funktionen geschrieben. Bei der Kompilierung mit g++
wird ein undefinierter Symbolfehler für Senden, __xnet_socket, listen, accept, __xnet_bind angezeigt.Auf Solaris, wenn mit g ++ kompiliert, werden socket() und bind() nicht mit dlsym() abgefangen
Warum die Symbole für Socket und Bindung anders sind als andere. Wenn das Programm unter Verwendung von gcc
kompiliert wird, tritt dieser "xnet
" Unterschied nicht auf. Dieser Verbindungsfehler gilt, wenn er mit libsocket.so
verknüpft ist.
Eigentlich schreibe ich eine gemeinsam genutzte Bibliothek, die diese Socket-APIs überlastet und sie unter Verwendung dlsym()
abfangen. Wenn diese Bibliothek unter Solaris mit gcc kompiliert wird, durchlaufen diese Aufrufe die Bibliothek. Bei der Kompilierung mit g++
werden die Aufrufe und bind()
jedoch nicht abgefangen, sondern alle anderen APIs durchlaufen die Bibliothek.
Hat libxnet.so
etwas damit zu tun? Kann Dtrace helfen?
* Wenn es mit g ++ kompiliert wird, gibt es einen undefinierten Symbolfehler zum Senden, __xnet_socket, listen, accept, __xnet_bind. * Das klingt, als ob du nicht mit '-lxnet' verknüpfst. Sende deinen Linkbefehl [s]. –