如何在C中链接包含的库?

时间:2014-03-21 14:09:33

标签: 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: error: linker command failed with exit code 1 (use -v to see invocation)

我认为它可能无法链接所以我添加了-L选项,这给了我同样的错误。我知道我已在我的/usr/local/include目录中安装了libevent。

3 个答案:

答案 0 :(得分:3)

这两个标志是:

  • -L为库添加搜索路径。如果包含路径为/usr/local/include,则库路径可能应为-L/usr/local/lib
  • -l链接库。如果库名为libevent.{a,so},则使用-levent

您也可以简单地将特定库(静态或动态)的完整路径添加到编译标记中。

答案 1 :(得分:2)

包含文件通常伴随库,但#include <...>语句链接该库! include文件使编译器可以使用某些信息,但链接器在编译之后(并且经常被误解,因为编译器通常会为您调用链接器)。

您需要包含链接器的-l选项...可能-l event(其中event表示您的库路径中将存在libevent.a)。

答案 2 :(得分:2)

您也可以使用pkg-config为您生成cflags。 可以在http://en.wikipedia.org/wiki/Pkg-config找到一个示例。 我用

搜索系统上安装的库
pkg-config --list-all |grep libevent

然后用

显示cflags
pkg-config --cflags --libs libevent

然后你可以用类似的东西(或者像在维基中那样)进行编译

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

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