【问题标题】:Adding libusb library to a Qt project in osx将 libusb 库添加到 osx 中的 Qt 项目
【发布时间】:2014-04-23 17:11:34
【问题描述】:

在过去的 16 个小时里,我一直在尝试将 libusb 库附加到 Qt 项目,但没有取得多大成功。我将不胜感激任何关于此事的意见,这令人沮丧。

.pro 文件是这样的:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

INCLUDEPATH +=/usr/local/include/libusb-1.0
LIBS += -L/usr/local/lib -libusb-1.0.a
LIBS += -L<libusb.h>

源代码:

#include <iostream>
#include <libusb.h>


using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

编译器输出:

13:01:50: Running steps for project lallala...
13:01:50: Configuration unchanged, skipping qmake step.
13:01:50: Starting: "/usr/bin/make" -w
make: Entering directory `/Users/MAXIMUS/Documents/workspace/lallala-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Debug'
/Users/MAXIMUS/Qt5.0.0/5.0.0/clang_64/bin/qmake -spec macx-g++42 CONFIG+=debug CONFIG+=x86_64 CONFIG+=declarative_debug CONFIG+=qml_debug -o Makefile ../lallala/lallala.pro
make: Leaving directory `/Users/MAXIMUS/Documents/workspace/lallala-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Debug'
make: Entering directory `/Users/MAXIMUS/Documents/workspace/lallala-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Debug'
g++-4.2 -headerpad_max_install_names -mmacosx-version-min=10.6 -o lallala main.o   -L/usr/local/lib -libusb-1.0.a -L<libusb.h> 
/bin/sh: -c: line 0: syntax error near unexpected token `newline'
/bin/sh: -c: line 0: `g++-4.2 -headerpad_max_install_names -mmacosx-version-min=10.6 -o lallala main.o   -L/usr/local/lib -libusb-1.0.a -L<libusb.h> '
make: *** [lallala] Error 2
make: Leaving directory `/Users/MAXIMUS/Documents/workspace/lallala-build-Desktop_Qt_5_0_0_clang_64bit_SDK-Debug'
13:01:50: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project lallala (kit: Desktop Qt 5.0.0 clang 64bit (SDK))
When executing step 'Make'

【问题讨论】:

  • 嗨,约翰。你不能只用pkg-config吗?这就是我们在 QtSerialPort 中所做的,但要确保它不是“本地”安装。做不到这一点,你检查过this link吗?
  • 您好 Laszlo,感谢您的意见和链接。我刚刚找到了一种通过 GUI 添加库的方法,我会看看这是否适合我。
  • 明白了!选择了答案,对此感到抱歉;)
  • 我还在习惯这个网站。

标签: c++ macos qt qmake libusb


【解决方案1】:

将我的评论变成正确的答案;这不是正确的语法:

LIBS += -L/usr/local/lib -libusb-1.0.a
LIBS += -L<libusb.h>

正确的应该是这样的:

LIBS += -L/usr/local/lib -lusb-1.0

LIBS += -l/full/path/to/libusb-1.0.a

您可以在初始尝试中删除第二行LIBS,因为您已经在前者中指定了路径,并且在其中放置“包含”语句无论如何都是不合理的。因此,这就是您可以为完整的 .pro 文件编写的内容:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp

INCLUDEPATH +=/usr/local/include/libusb-1.0
LIBS += -L/usr/local/lib -lusb-1.0

这不是 Qt 特定的,只是通用链接问题:-lfoo 扩展到 $(prefix)foo$(suffix),其中前缀和后缀是根据平台自动计算出来的。也就是说,在您的情况下,前缀是 lib,在 Unix 上,后缀是 .a.so,在 Mac 上可能是 .dylib,等等。

如果可以建立,您可能希望查看 pkg-config 支持。在这种情况下,你会像我们在 QtSerialPort 中所做的那样编写类似的东西:

CONFIG += link_pkgconfig
PKGCONFIG += libudev

另一个选项是通过 QtCreator IDE 或您可能正在使用的类似 IDE 添加 GUI。 “链接器”部分通常有一个选项可以添加库。这是我的 QtCreator 的两个屏幕截图:

在项目源树导航器中点击左侧的项目名称,然后选择Add Library。然后会出现第一个截图,可以选择external选项,然后就可以看到第二个了。

不用说,您需要在这些更改之后运行 qmake 以在您想要的平台上生成相应的 Makefile。

【讨论】:

  • 非常感谢!先生,你真了不起。我使用了我在网上找到的示例代码并顺利编译它。如果您不介意,我还有几个问题,它的 lusb-1.0 是怎么来的?我在目录中找不到该文件。另外,您是否有机会将我引导到一个链接,在那里我可以了解有关 pkg-config 概念的更多信息?我仍然不明白它究竟扮演什么角色。再次感谢!我发布了对我有用的 .pro 代码。
  • @DutyClean:这不是 Qt 特定的,只是一般的链接问题。 -lfoo 扩展到 $(prefix)foo$(suffix),其中前缀和后缀是根据平台自动计算出来的。也就是说,在您的情况下,前缀是“lib”,后缀是“.a”或“.so”。
【解决方案2】:

语法如下: -L%LIBRARY_PATH% 使特定路径可见并且 -l%LIBRARY_NAME% 链接位于可见路径中的特定库

所以我想这应该可行(我认为您不需要 .a 扩展名):

LIBS += -L/usr/local/lib -llibusb-1.0

我不知道这会做什么: LIBS += -L 所以我想我会删除它。

一旦修复运行 qmake 然后构建...

希望对你有帮助...

【讨论】:

  • 一些文字被剪掉了。我的意思是删除你的 pro 文件的最后一行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多