2012-09-18 37 views
3

我有點困惑,當涉及到Qt和交叉編譯我的胳膊Linux的 appliations:的手臂Linux的QT建築應用

到目前爲止,我有我的AT91SAM9263-EK運行Linux和適當 包含QT庫的文件系統通過buildroot構建。

另外我在我的Ubuntu上構建了QT-4.8。

現在我想建立一個示例應用程序:

  1. 我創建在一個例子中生成文件夾QT使用 QMAKE我的Ubuntu;我在mkspecs/qws/linux-arm-g ++中使用了給定的qmake.conf。

  2. 當執行make時,我得到一個錯誤,因爲它包含qatomic_i386.h 和消息「錯誤:'asm'中的不可能約束'」。 這個頭文件明顯不符合我的arm工具鏈。

我的問題: 如何在我的Ubuntu打造的Qt二進制文件在我的手臂嵌入式linux 配置的Qt?我是否需要包含由arm工具鏈構建的任何庫?

任何幫助表示讚賞!

問候

編輯: 我使用-spec標誌,並傳遞給 「mkspecs/QWS /臂-Linux的克++」,其中 「qmake.conf」 所在的路徑。我沒有在這裏改變任何東西,因爲我不知道這個qmake變量是否與鏈接到我的手臂相關的庫相關。 所以使用了正確的編譯器,我可以驗證make過程何時開始。但我觀察到,在一個名爲qconfig.h的配置文件中,有一個ARCH標誌被設置爲i386,但我沒有弄清楚如何配置它。我不認爲我應該手動編輯這個文件。

EDIT2: 有人知道文件後面是什麼qconfig.h ??我應該手動調整它嗎?

+0

qmake參考手冊是查找所有qmake.conf變量的好地方:http://qt-project.org/doc/qt-5/qmake-variable-reference.html – Hamzahfrq

回答

4

我會自己解決吧:)

掙扎了一會兒,掃描網絡後,我陷入更深一點的一切是如何一起工作。我不明白如何爲我的ARM目標設備生成可執行文件。我想出了兩件事:

  1. 不要在您的PATH變量的開頭添加X11的QT路徑。這可能會弄亂你的交叉編譯。

  2. 相應地編輯qmake.conf。添加您的庫構建目標設備,在我的情況是位於buildroot。添加論文行到你的qmake.conf文件:
    QMAKE_CFLAGS + = -O3 -march =的ARMv5TE
    QMAKE_CXXFLAGS + = -O3 -march =的ARMv5TE
    QMAKE_INCDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output /分期/ usr/include目錄
    QMAKE_LIBDIR_QT = /home/user/arm/toolchain/buildroot-2010.11/output/staging/usr/lib

我現在運行。謝謝大家!

0

是的,你要麼在工具鏈中提供Qt庫,要麼告訴qmake在哪裏可以找到它們。另外,我懷疑你沒有使用-spec參數調用qmake。如果您使用的是您在發行版中找到的qmake,它將使用默認規格,這不是我猜想的。添加-spec參數並將其指向arm mkspec。另外,確保生成的g ++命令鏈接到爲arm編譯的正確Qt庫。

+0

請參閱我上面的評論 – binaryguy

+0

您'將不得不爲你的平臺(EGL,Op​​enGL,X11等)提供頭文件和庫的路徑,如果這些文件不在你的sysroot中,也要提供給Qt庫。你沒有指定你正在討論的配置文件,所以不知道。閱讀qmake手冊和liuyi提供的鏈接,以正確設置規格文件。 –

+0

鏈接描述如何構建Qt本身,但我想構建一個示例應用程序。我正在討論位於mkspecs文件夾中的名爲qconfig.pri的文件。該文件包含一個設置爲i386的QT_ARCH變量。 – binaryguy

-3

您將爲嵌入式Linux安裝QtSDK,然後使用它來構建您的應用程序。恐怕您現在只有用於x86的QtSDK。在安裝嵌入式linux的QtSDK之後,它通常具有qws/linux-arm-g ++作爲默認的mkspace。如果你沒有用於嵌入式linux的QtSDK,你可以從源代碼構建它。然後運行qmake爲您創建Makefile應用程序。

$QTDIR_FOR_ARM/qmake 

參考: Installing Qt for Embedded LinuxCross-Compiling Qt for Embedded Linux Applications

+0

Ubuntu已經有mkspec for arm了。無需安裝任何東西。另外,他已經爲他的平臺編譯了庫,不需要重新編譯。 –