ソケット関数を使用して簡単なサーバープログラムを作成しました。 g++
でコンパイルすると、send、__ xnet_socket、listen、accept、__ xnet_bindのシンボルが定義されていません。g ++でコンパイルすると、dlsym()を使用してsocket()とbind()がインターセプトされません。
なぜソケットとバインドのシンボルが他と異なるのですか? また、gcc
を使用してプログラムをコンパイルすると、この 'xnet
'の違いは発生しません。 libsocket.so
とリンクすると、このリンクエラーが発生します。
実際には、これらのソケットAPIをオーバーロードし、dlsym()
を使用してそれらを傍受する共有ライブラリを作成しています。 Solarisでこのライブラリをgccでコンパイルすると、これらの呼び出しはライブラリを経由しますが、g++
でコンパイルすると、socket()
とbind()
呼び出しは傍受されませんが、他のすべてのapisはライブラリを経由します。
libxnet.so
これを行うには? dtraceに何か助けてもらえますか?
* g ++でコンパイルすると、send、__xnet_socket、listen、accept、__xnet_bindの定義されていないシンボルエラーが発生します。* '-lxnet'とリンクしていないようです。リンクコマンド[s]を投稿してください。 –