【发布时间】: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 文件的路径。