【问题标题】:gcc - undefined reference to `libusb_init'gcc - 对“libusb_init”的未定义引用
【发布时间】:2018-07-02 10:40:57
【问题描述】:

我正在尝试编译一段使用 libusb 的代码:

#include <stdio.h>
#include <libusb-1.0/libusb.h>
#include <assert.h>

int main(void) {
    libusb_context *context = NULL;
    int rc = 0;

    rc = libusb_init(&context);
    assert(rc == 0);

    libusb_exit(context);
    return 0;
}

使用gcc -lusb -lusb-1.0 sample.c -o sample 编译时出现以下错误:

/tmp/ccr65JBT.o: In function `main':
sample.c:(.text+0x2e): undefined reference to `libusb_init'
sample.c:(.text+0x62): undefined reference to `libusb_exit'
collect2: error: ld returned 1 exit status

为了确保 libusb 在我的系统上可用:

raven@enforcer:~/sample$ pkg-config --libs libusb-1.0
-lusb-1.0
raven@enforcer:~/sample$ pkg-config --libs libusb
-lusb

我正在运行带有 gcc 7.3.0-16ubuntu3 的 Ubuntu 18.04,如何修复?

【问题讨论】:

标签: c gcc libusb libusb-1.0


【解决方案1】:

通过在 .c 后附加标志使其工作:gcc sample.c -o sample -lusb -lusb-1.0

自动工具:sample_LDADD 而不是 sample_LDFLAGS

感谢菲利克斯·帕尔门。

【讨论】:

  • 粗略的解释:链接器通常通过保存未解析符号的列表并从稍后遇到的目标文件(或档案或库)中解析它们来工作......而 GCC 让链接器处理目标文件按它们在初始命令行中出现的顺序排列。
猜你喜欢
  • 2018-05-07
  • 2017-10-26
  • 1970-01-01
  • 2019-08-10
  • 2015-08-23
  • 1970-01-01
  • 2014-04-21
  • 2012-12-12
  • 2019-05-05
相关资源
最近更新 更多