我正在尝试在操作系统上设置libusb API。我在libusb.org上下载了libusb api。我遵循了标准的安装过程:
cd into directory ./configure make make check //without errors make install
然后,我启动了Eclipse C / C ++,并从Internet上的教程中复制了一些代码。但是当尝试构建它时,我得到以下输出:
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)版本编译器。
那么我该怎么做才能解决这些未定义的引用?非常感谢您的帮助:)
您必须设置库链接器标志以便在链接器中进行编译,您可以通过执行以下命令在控制台中获取完整列表
pkg-config --list-all
这些是您已在系统上安装的库,您必须链接到要使用的库。所以在你的例子中是libusb所以你
pkg-config --libs libusb
应该有输出
-lusb
要么
-lusb-1.0
这为您提供了必须传递给链接器的标志。例如
g++ myfile.cpp -lusb[-1.0]
然后,您编辑项目的配置并搜索链接器标志,在buildoptions中的某个位置应有一个文本字段。我不太确定在哪里可以找到它,但是建议使用它:
Project -> Properties -> C/C++ Build -> Miscellaneous -> flags
找到它之后,只需在文本字段中添加链接器标志,就可以了。
编辑
由于我的答案是已接受的答案,因此我还添加了似乎对很多人有用的另一个标记。