无法将 LIBEVENT 链接为 C++

Posted

技术标签:

【中文标题】无法将 LIBEVENT 链接为 C++【英文标题】:Cannot link LIBEVENT as C++ 【发布时间】:2011-11-18 17:02:20 【问题描述】:

为什么这不起作用,文件test.c

#include <event.h>
int main(void)

    event_init();
    return 0;

然后: gcc -o test.o -c test.c 运行正常,但是

链接: g++ -o test -levent test.o 产生

test.o: In function `main':
test.c:(.text+0x5): undefined reference to `event_init'
collect2: ld returned 1 exit status

所以它不能链接为C++。如何解决这个问题?我需要将其链接为C++ 并编译为C

【问题讨论】:

g++ -o test test.o -levent... 是的,订单很重要 试试g++ -o test test.o -levent 【参考方案1】:

这个问题已经被问过很多次了。在 Linux 上,您应该在编译命令中将库放在对象和源文件之后。所以试试

g++ -Wall -g -c mytest.cc 
g++ -Wall -g mytest.o -levent -o mytest

避免调用您的测试程序test,这是一个现有的实用程序或内置shell。

作为新手,请记住始终在编译时询问-Wall 和调试-g 的所有警告并学习使用gdb

【讨论】:

我反对编译器警告和调试器是“新手”工具。 每个人都应该强制编译器警告。 对不起,我不是那个意思(请记住,我不是以英语为母语的人)。我只是说新手经常忘记启用警告和调试。一旦您对 C 或 C++ 编程更加熟练,您就不会忘记它们! 是的,这是有道理的。 “作为新手,记得启用 ...”:-) 如果这个问题被问了很多次,你为什么还要回答呢? 对象规则后why库的解释:webpages.charter.net/ppluzhnikov/linker.html

以上是关于无法将 LIBEVENT 链接为 C++的主要内容,如果未能解决你的问题,请参考以下文章

我可以将 C++11 lambda 与 libevent 一起使用吗?

C & Libevent:将二进制数据添加到输出缓冲区

用cygwin在windows下构建libevent?

如何将参数传递给使用 libevent 创建的事件函数?

带有 libevent/libev 的 C 或 C++:监视 unix 套接字

发布多部分文件上传时的 libevent 块