簡體   English   中英

與CMake交叉編譯:如何排除默認的qt庫,而不是將它們傳遞給鏈接器的命令行

[英]Cross-compile with CMake: How to exclude default qt libraries and not to pass them to linker's command line

我想在Linux x64上使用CMake for ARM交叉編譯Qt行星演示應用程序。

我安裝了arm交叉編譯器。 我在ARM板上構建了Qt庫並將它們復制到x64 Linux機器的/ lib / arm-linux-gnueabihf。

對於qmake,我只使用幾行添加到planets.pro文件:

PLATFORM = arm-linux-gnueabihf
QMAKE_CXX = /usr/bin/$$PLATFORM-g++
QMAKE_LINK = /usr/bin/$$PLATFORM-g++
QMAKE_LIBS = -L/usr/$$PLATFORM/lib -L/lib/$$PLATFORM

它成功編譯並在ARM板上完美運行。

現在,我想用CMake做到這一點。 所以,我創建了以下CMakeLists.txt:

cmake_minimum_required(VERSION 3.5)

set(PLATFORM arm-linux-gnueabihf)
set(CMAKE_CXX_COMPILER /usr/bin/${PLATFORM}-g++)
link_directories(/usr/${PLATFORM}/lib /lib/${PLATFORM})

file(GLOB_RECURSE HEADERS "*.hpp")
file(GLOB SOURCES "*.cpp")

set(CMAKE_AUTOMOC ON)

find_package(Qt5Qml REQUIRED)
find_package(Qt5Quick REQUIRED)

add_executable(planets-qml ${SOURCES})

target_link_libraries(planets-qml
    Qt5::Qml
    Qt5::Quick
)

有了這個,我在Qt Creator的日志中有以下警告:

Cannot generate a safe runtime search path for target planets-qml because
files in some directories may conflict with libraries in implicit
directories:

runtime library [libGL.so.1] in /usr/lib/x86_64-linux-gnu may be hidden by files in:
  /lib/arm-linux-gnueabihf

然后,我正在構建它,我收到鏈接器錯誤:

/home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Quick.so.5.7.0: 
file not recognized: File format not recognized

我認為這是因為鏈接器試圖將x64 Qt庫鏈接到ARM二進制文件。 但為什么不能從/ lib / arm-linux-gnueabihf找到libs?

我在文件linker.txt中找到了鏈接器的命令:

/usr/bin/arm-linux-gnueabihf-g++ 
    CMakeFiles/planets-qml.dir/main.cpp.o 
    CMakeFiles/planets-qml.dir/planets-qml_automoc.cpp.o  
    -o planets-qml  
    -L/usr/arm-linux-gnueabihf/lib  -L/lib/arm-linux-gnueabihf 
    /home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Quick.so.5.7.0 
    /home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Qml.so.5.7.0 
    /home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Network.so.5.7.0 
    /home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Gui.so.5.7.0 
    /home/dev/Qt5.7.0/5.7/gcc_64/lib/libQt5Core.so.5.7.0 
    -Wl,-rpath,/usr/arm-linux-gnueabihf/lib:/lib/arm-linux-gnueabihf:/home/dev/Qt5.7.0/5.7/gcc_64/lib 

所以,問題是:如何排除這些/ home / dev / Qt5 ...條目而不是將它們傳遞給鏈接器? 我應該在CMakeLists.txt文件中使用什么CMake命令?

問題是你正在查看錯誤的QT目錄。 您需要為ARM重新編譯Qt。 然后在find_package調用之前設置Qt5_DIR

set(Qt5_DIR  <path-to-Qt>/lib/cmake/Qt5/)

您的<path-to-Qt>/lib/cmake/Qt5/應該如下所示:

$ ls <path-to-Qt>/lib/cmake/Qt5/
Qt5Config.cmake        Qt5ConfigVersion.cmake 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM