Ubuntu的10.04 32位,蚀,C和C ++
我有一个使用select()来监视一堆TCP和UDP端口的程序。 我创建以通常的方式这些端口使用的sockaddr_in结构(插座(),绑定(),听(),接受()等)。
该程序在命令行工作正常。 我用的是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 ++的没有声明或使用直到该点的对象的混合。
这是开始ODF的程序。 还有其它端口一些额外的相同的比特。
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();
}
// ...........
}
所以,我的问题是,如何调试和追踪这些警告的原因。
谢谢,