【问题标题】:How to link an included library in C?如何在 C 中链接包含的库?
【发布时间】:2014-03-21 14:09:32
【问题描述】:

我一直在尝试在程序中使用包含的 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。

【问题讨论】:

    标签: c linker clang libevent


    【解决方案1】:

    这两个标志是:

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

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

    【讨论】:

      【解决方案2】:

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

      您需要包含链接器的-l 选项...也许是-l event(其中event 意味着libevent.a 将存在于您的库路径中)。

      【讨论】:

        【解决方案3】:

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

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

        然后用

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

        然后您可以使用类似(或类似 wiki)的内容进行编译

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-01-10
          • 2018-03-15
          • 1970-01-01
          • 1970-01-01
          • 2021-08-01
          • 1970-01-01
          • 2023-04-10
          相关资源
          最近更新 更多