【问题标题】:ld: symbol(s) not found for architecture x86_64 (libusb)ld:未找到架构 x86_64 (libusb) 的符号
【发布时间】:2013-11-25 20:32:55
【问题描述】:

我正在尝试在我的 Mac 上编译以下 libusb sn-p:

#include <stdio.h>
#include <stdlib.h>
#include <libusb.h>

int main(void) {
    libusb_device **devices;
    ssize_t device_count = 0;

    device_count = libusb_get_device_list(NULL, &devices);

    printf("%d devices found\n", (int)device_count);

    return EXIT_SUCCESS;
}

我通过 Homebrew 安装了 libusb。

我在编译过程中遇到以下错误:

ld:未找到架构 x86_64 的符号

完整的编译器输出如下:

22:28:24 **** Incremental Build of configuration Debug for project libusb ****
make all 
Building file: ../src/libusb.c
Invoking: Cross GCC Compiler
gcc -I/usr/local/Cellar/libusb/1.0.9/include/libusb-1.0/ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/libusb.d" -MT"src/libusb.d" -o "src/libusb.o" "../src/libusb.c"
Finished building: ../src/libusb.c

Building target: libusb
Invoking: Cross GCC Linker
gcc  -o "libusb"  ./src/libusb.o   
Undefined symbols for architecture x86_64:
  "_libusb_get_device_list", referenced from:
      _main in libusb.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [libusb] Error 1

22:28:24 Build Finished (took 119ms)

我知道问题在于链接器没有找到 libusb 库,对吧?如何告诉编译器它在 Eclipse CDT 中的位置?

【问题讨论】:

  • 是的,您需要以某种方式将 -lusb 添加到您的链接命令中。也许还有一个 -L 开关来告诉它在哪里可以找到 libusb。我不使用eclipse,所以我不能告诉你如何。只是一个评论:你的 .c 文件被命名为“libusb”有点令人困惑。使用 libusb 的项目通常不会被称为“libusb”。
  • 我同意项目名称,这只是一个示例。当我开始编写我的实际实现时,它可能会被分箱。我会考虑在 Eclipse 中添加 -L 和 -lusb,至少我知道命令行 gcc 调用中缺少什么。
  • 命令现在看起来像这样: gcc -o "libusb" ./src/libusb.o -l/usr/local/Cellar/libusb/1.0.9/lib/libusb-1.0.dylib,因为我已将 libusb-1.0.dylib 添加到 Eclipse CDT 配置中。现在得到: ld: library not found for -l/usr/local/Cellar/libusb/1.0.9/lib/libusb-1.0.dylib
  • 试试 gcc -o libusb ./src/libusb.o /usr/local/Cellar/libusb/1.0.9/lib/libusb-1.0.dylib
  • 如果你给 gcc 提供了库的路径,你不希望在它前面有一个开关。只是 .dylib 文件的路径。

标签: c libusb


【解决方案1】:

正如我们在所有 cmets 中得出的那样,有效的链接命令是

gcc -L/usr/local/Cellar/libusb/1.0.9/lib -o "libusb_example" ./src/libusb_example.o -lusb1.0

【讨论】:

  • 我遇到了同样的问题,但我使用的是 macports。 (而且是 7 年后。)对这个答案的轻微修改,也使用“-l”,工作:cc -I/opt/local/include -L/opt/local/lib/ -lusb-1.0 myprog.c -o myprog
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多