如何链接C中包含的库?

如何链接C中包含的库?,c,linker,clang,libevent,C,Linker,Clang,Libevent,我一直在尝试在程序中使用包含的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: e

我一直在尝试在程序中使用包含的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。 有关示例,请访问。 我搜索安装在具有的系统上的库

pkg-config --list-all |grep libevent
然后用

pkg-config --cflags --libs libevent
然后,您可以使用类似(或wiki中的类似)的内容进行编译

因此,如果路径或系统发生变化,您也不会遇到麻烦

gcc `pkg-config --cflags --libs libevent` blub.c -o blub