[英]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.