2014-04-23 73 views
3

我一直試圖在過去的16個小時內將libusb庫附加到Qt項目中,但沒有取得太大的成功。我很感激任何關於此事的意見,這讓人感到沮喪。將libusb庫添加到osx中的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' 
+0

嗨,約翰。你不能只使用[pkg-config](https://qt.gitorious.org/qt/qtserialport/source/6e75610dff5fb96ebd72cfb40ba7cbfea4bd21b7:src/serialport/serialport-lib.pri#L11)嗎?這就是我們在QtSerialPort中所做的,儘管確保它不是「本地」安裝。如果沒有,你是否檢查了[這個鏈接](http://www.yoctopuce.com/EN/article/how-to-use-us-b-devices-from-qt-framework)? – lpapp

+0

拉斯洛你好,感謝您的意見和鏈接。我只是找到了一種通過GUI添加庫的方法,我會看看這是否適合我。 –

+0

嘿!選擇了答案,對此感到抱歉;) –

回答

3

形成我的評論到一個合適的回答;這不是正確的語法的使用方法:

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

的適當的一個將是這樣:

LIBS + = -L/USR /本地/ lib中-lusb-1.0

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

您可以在第一次嘗試中刪除第二行LIBS行,因爲您已經在前者中指定了路徑,而puttin無論如何,g中的「包含」聲明都是不合理的。所以,這是你可以爲你的完整的.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,後綴是,要麼.a.so在Unix上,可能在Mac .dylib

您不妨看看pkg配置的支持,如果有可能建立。在這種情況下,你會寫這樣的事情我們在QtSerialPort做:

CONFIG += link_pkgconfig 
PKGCONFIG += libudev 

另一個選擇是通過QtCreator IDE或類似的IDE,你可能會使用添加的GUI。通常在「鏈接器」部分中有一個選項用於添加庫。下面是我的QtCreator兩個截圖:

enter image description here

enter image description here

點擊左側的項目源樹瀏覽器,並選擇Add Library項目名稱。然後第一個屏幕截圖會出現,您可以選擇外部選項,然後您可以看到第二個屏幕。

無需多言,您需要在這些更改後運行qmake,以在您所需的平臺上生成相應的Makefile。

+0

非常感謝!你先生,太棒了。我使用了我在網上找到的示例代碼,並將其編譯出來。如果你不介意,我仍然有幾個問題,它的lusb-1.0怎麼樣?我無法在目錄中找到該文件。另外,有什麼機會可以指引我到一個鏈接,我可以更多地瞭解pkg-config的概念?我仍然不明白它究竟扮演了什麼角色。再次感謝!我發佈了適用於我的.pro代碼。 –

+1

@DutyClean:這不是Qt特有的,只是泛型鏈接問題。 '-lfoo'擴展到$(前綴)foo $(後綴),前綴和後綴根據平臺自動計算出來。也就是說,在你的情況下前綴是「lib」,後綴是「.a」或「.so」。 – lpapp

0

語法如下: -L%LIBRARY_PATH%至使特定路徑可見並且 -l%LIBRARY_NAME%將特定鏈接位於在可見路徑

所以我想這應該工作庫(我不認爲你需要.a擴展名):

LIBS + = -L在/ usr/local/lib目錄-llibusb- 1.0

我不知道這會做什麼: LIBS + = -L 所以我想我會刪除它。

一旦固定運行QMAKE再建...

希望它可以幫助...

+0

一些文字被剪下。我的意思是刪除你的pro文件的最後一行 – user3565708

+0

'-llibusb-1.0'看起來不對。 – lpapp