将libusb库添加到osx中的Qt项目中

时间:2014-04-23 17:11:34

标签: c++ macos qt qmake libusb

在过去的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'

2 个答案:

答案 0 :(得分:4)

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

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,因为您已经在前者中指定了路径,并且在其中放置“include”语句无论如何都不合理。因此,这是您可以为完整的.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的两个截图:

enter image description here

enter image description here

单击项目源树导航器左侧的项目名称,然后选择Add Library。然后会出现第一个屏幕截图,您可以选择外部选项,然后您可以看到第二个。

毋庸置疑,您需要在这些更改后运行qmake,以在您所需的平台上生成相应的Makefile。

答案 1 :(得分:0)

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

所以我想这应该有用(我认为你不需要.a扩展名):

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

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

修复运行qmake 后再构建...

希望它有所帮助...