【发布时间】:2014-03-04 08:15:30
【问题描述】:
我正在尝试使用 g++ 链接 libevent,但由于我在配置时使用 --prefix 标志设置了 libevent 的安装目录而遇到了问题。为了安装 libevent,我下载了最新的源代码,将其解压缩并在目录中运行以下命令
./configure --prefix=/home/tom/local --disable-shared && make 进行安装运行这些命令后,libevent 成功安装到 /home/tom/local 文件夹。现在为了测试我是否可以使用 libevent,我已经下载了带有 libevent 的示例 rot13 服务器,可以在以下位置找到:http://www.wangafu.net/~nickm/libevent-book/01_intro.html
要编译,我运行以下命令:
g++ -I=/home/tom/local/include rot13server.cpp -L/home/tom/local/lib
但我得到以下编译错误:
/tmp/cctwJY4k.o:在函数“alloc_fd_state(event_base*,int)”中: libevent.cc:(.text+0x9b): undefined reference to `event_new' libevent.cc:(.text+0xec): undefined reference to `event_new' libevent.cc:(.text+0x11a): undefined reference to `event_free' /tmp/cctwJY4k.o:在函数“free_fd_state(fd_state*)”中: libevent.cc:(.text+0x1b6): undefined reference to `event_free' libevent.cc:(.text+0x1c9): undefined reference to `event_free' /tmp/cctwJY4k.o:在函数“do_read(int,short,void*)”中: libevent.cc:(.text+0x310): undefined reference to `event_add' /tmp/cctwJY4k.o:在函数“do_write(int,short,void*)”中: libevent.cc:(.text+0x4da): undefined reference to `event_del' /tmp/cctwJY4k.o:在函数“do_accept(int, short, void*)”中: libevent.cc:(.text+0x564): undefined reference to `evutil_make_socket_nonblocking' libevent.cc:(.text+0x5da): undefined reference to `event_add' /tmp/cctwJY4k.o:在函数“运行()”中: libevent.cc:(.text+0x5f3): undefined reference to `event_base_new' libevent.cc:(.text+0x63f): undefined reference to `evutil_make_socket_nonblocking' libevent.cc:(.text+0x6d2): undefined reference to `event_new' libevent.cc:(.text+0x6e7): undefined reference to `event_add' libevent.cc:(.text+0x6f3): undefined reference to `event_base_dispatch' collect2:错误:ld 返回 1 个退出状态似乎编译器正在查找包含文件而不是目标文件。
我还尝试在不使用 --disable-shared 选项的情况下配置 libevent,然后将 /home/tom/local/lib 导出到 LD_LIBRARY_PATH,但编译命令仍然出现相同的错误:
g++ -I=/home/tom/local/include rot13server.cpp谁能告诉我我做错了什么?
谢谢
【问题讨论】:
-
您需要在编译和链接源代码时命名您需要的库。您可能需要添加
-levent或-levent_core -
哇,感谢 -levent 选项使一切编译正确