我一直在尝试在程序中使用包含的libevent,但是我一直收到错误。
gcc lumberd.c Network.c ../Config.c -o lumberd.x
Undefined symbols for architecture x86_64:
"_event_base_new", referenced from:
_main in lumberd-c86954.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我认为它可能无法链接,所以我添加了-L选项,这给了我同样的错误。我知道我已经在我的/usr/local/include
目录下安装了libevent。
这两个标志是:
-
-L
添加库的搜索路径。如果包含路径为/usr/local/include
,则库路径可能为-L/usr/local/lib
。 -
-l
链接库。如果库名为libevent.{a,so}
,则使用-levent
。
您还可以简单地将特定库(静态或动态)的完整路径添加到编译标志中。
包含文件通常伴随着库,但是#include <...>
语句没有链接该库!include文件为编译器提供了某些信息,但链接器是在编译之后的(这经常被误解,因为编译器通常会为您调用链接器)。
你需要包含链接器的-l
选项…可能是-l event
(其中event
暗示libevent.a
将存在于您的库路径中)。
您也可以使用pkg-config为您生成cflag。可以在http://en.wikipedia.org/wiki/Pkg-config上找到一个例子。我用
搜索系统上安装的库pkg-config --list-all |grep libevent
然后用
显示cflagspkg-config --cflags --libs libevent
你可以用类似于(或者在wiki中)
的东西来编译。gcc `pkg-config --cflags --libs libevent` blub.c -o blub
所以当路径或系统发生变化时也不会遇到麻烦