10

我正在尝试在我的操作系统上设置 libusb API。我在 libusb.org 上下载了 libusb api。我遵循标准安装程序:

cd into directory
./configure
make
make check //without errors
make install

然后我启动了 Eclipse C/C++ 并从网上找到的教程中复制了一些代码。但是在尝试构建它时,我得到了以下输出:

main.cpp:(.text+0x19): undefined reference to `libusb_init'
main.cpp:(.text+0x76): undefined reference to `libusb_set_debug'
main.cpp:(.text+0x8a): undefined reference to `libusb_get_device_list'
main.cpp:(.text+0x136): undefined reference to `libusb_free_device_list'
main.cpp:(.text+0x142): undefined reference to `libusb_exit'
/tmp/ccOWJGwe.o: In function `printdev(libusb_device*)':
main.cpp:(.text+0x162): undefined reference to `libusb_get_device_descriptor'
main.cpp:(.text+0x28a): undefined reference to `libusb_get_config_descriptor'
main.cpp:(.text+0x4d4): undefined reference to `libusb_free_config_descriptor'
collect2: ld returned 1 exit status

我在/lib 中有libusb.so,在/usr/local/include 中有usb.h,在/usr/local/lib 中有.so 和libusb.a 的链接。

代码中的#include 也是正确的。

我知道问题出在链接器中,但我有点无法让它工作:)

我正在使用 Fedora 15 操作系统和 gcc 4.6.0 20110603 (Red Hat 4.6.0-10) 版本编译器。

那么我能做些什么来解决这些未定义的引用呢?非常感谢您的帮助:)

4

4 回答 4

23

我确实遇到了同样的问题。但我能够通过将“-lusb-1.0”添加到链接器来解决它。

例如:g++ myfile.cpp -lusb-1.0

于 2014-01-27T13:50:52.147 回答
18

您必须在链接器中设置库链接器标志以进行编译,您可以通过执行在控制台中获取完整列表

pkg-config --list-all

这些是您在系统上安装的库,您必须链接到您想要使用的库。所以在你的例子中它是 libusb 所以你做

pkg-config --libs libusb

应该有输出

-lusb

或者

-lusb-1.0

这为您提供了必须传递给链接器的标志。例如

g++ myfile.cpp -lusb[-1.0]

然后您编辑项目的配置并搜索链接器标志,在构建选项中的某处应该有一个文本字段。我不太确定在哪里可以找到它,但建议使用谷歌搜索:

Project -> Properties -> C/C++
Build -> Miscellaneous -> flags

找到它后,只需在文本字段中添加链接器标志就可以了。

编辑

由于我的答案是公认的答案,因此我还添加了另一个似乎对很多人都有效的标志。

于 2011-08-13T12:58:24.577 回答
1

你的链接器命令行是什么?您需要-lusb在链接命令中有;仅仅包含标题是行不通的。

于 2011-08-13T12:47:30.723 回答
1

我不使用 Eclipse C/C++,但我很确定原因与我前段时间在 Netbeans 中设置 C 项目时遇到的原因相同。

将代码和库放在正确的位置是不够的#include——您还必须告诉 Eclipse 在哪里查找它们以及如何使用它们。本教程向您展示了如何在 Eclipse 中进行设置。

于 2011-08-13T12:48:21.803 回答