gpt4 book ai didi

c++ - 我该如何处理这个 Linux C++ 警告? "can' t 为 `sockaddr_in' 的虚拟表找到链接器符号“

转载 作者:行者123 更新时间:2023-11-30 03:02:20 25 4
gpt4 key购买 nike

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();
}

// ...........
}

所以,我的问题是,如何调试和追踪这些警告的原因。

谢谢,

最佳答案

GDB 仍然不够完美,尤其是在调试 C++ 代码时。

在这种情况下,sockaddr_in 是“普通旧数据”(没有任何 C++ 功能的 C 结构)。它不需要也不应该有任何虚拟表。如果 GDB 不这么认为,那就是 GDB 的问题。

There are two bugs open in GDB bug database that quite this exact message (对于不同的结构/类)。除非它妨碍您的调试,否则我不会太担心它。

关于c++ - 我该如何处理这个 Linux C++ 警告? "can' t 为 `sockaddr_in' 的虚拟表找到链接器符号“,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10227847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com