Ubuntu 10.04 32ビット、Eclipse、CおよびC ++
select()を使用して一連のTCPおよびUDPポートを監視するプログラムがあります。これらのポートは、 sockaddr_in構造体を使用して、通常の方法(socket()、bind()、listen()、accept()など)で作成します。
プログラムはコマンドラインで正常に動作します。次の警告に気付いたとき、私はEclipseデバッガーを使用してバグを修正していました(今すぐ修正されました!)。
warning: can't find linker symbol for virtual table for `sockaddr_in' value
warning: found `operator delete(void*)' instead
さて、私のバグを修正した後、私はチェックしました、そして警告は持続しました。
ポート/ソケットが接続されるConfigureServer()ルーチンに入るとすぐに、警告が開始されることを知っています。sockaddr_in構造体はルーチンで宣言され、スタック上にあります。実際、プログラムにはまだ何もありません。これはCとC++の組み合わせであり、これまでにオブジェクトが宣言または使用されていません。
これは、ルーチンの始まりです。他のポートには、さらにいくつかの同一ビットがあります。
int configureServer()
{
sockaddr_in servAddr;
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_port = htons( g_tcpPorts[0].serverPort );
servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
/* Create and initialize the TCP socket */
if (( g_tcpPorts[0].serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP)) < 0 )
{
PLOG( ERROR ) << "failed to acquire a socket for IO Control Server port: " << g_tcpPorts[0].serverPort;
return -1; // caller will CloseAllPorts();
}
// ...........
}
したがって、私の質問は、これらの警告の原因をデバッグして追跡するにはどうすればよいかということです。
ありがとう、