Кросс-компиляция Qt5 для Raspberry Pi с использованием CMake - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь выполнить кросс-компиляцию программы qt5 для raspberry pi, используя CMake, и не могу пройти через ошибку: Failed to find "GL/gl.h" in "/usr/include/libdrm".Я просто опубликую все, что я сделал, и я надеюсь, что кто-то поможет.

Мой файл CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project(RPQT_server)
set(Qt5_DIR "/home/int-krta/Qt/5.11.1/gcc_64/lib/cmake/Qt5")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
find_package(Qt5 COMPONENTS Widgets Network CONFIG REQUIRED)
file(GLOB HEADERS "include/*.h")
file(GLOB SOURCES "src/*.cpp")

set(RPQT_server_SRCS ${SOURCES})
set(RPQT_server_MOC_HDRS ${HEADERS})

qt5_wrap_cpp(RPQT_server_CPP_FILES ${RPQT_server_MOC_HDRS})

add_executable(${PROJECT_NAME} ${RPQT_server_SRCS} ${RPQT_server_CPP_FILES})

set(RPQT_server_HEADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories(${RPQT_server_HEADER_DIR})

target_link_libraries(RPQT_server Qt5::Widgets Qt5::Network)

Мой файл Toolchain.cmake:

set(CMAKE_SYSTEM_NAME Linux)

SET(CMAKE_C_COMPILER $ENV{HOME}/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)

SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/crosscompile_toolchain/rootfs)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")
SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} --sysroot=${CMAKE_FIND_ROOT_PATH}")

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

INCLUDE_DIRECTORIES($ENV{HOME}/crosscompile_toolchain/rootfs/opt/vc/include)
INCLUDE_DIRECTORIES($ENV{HOME}/crosscompile_toolchain/rootfs/opt/vc/include/interface/vcos/pthreads)
INCLUDE_DIRECTORIES($ENV{HOME}/crosscompile_toolchain/rootfs/opt/vc/include/interface/vmcs_host/linux)

Я запускаю эту команду cmake:

cmake -D CMAKE_BUILD_TYPE=Debug -D CMAKE_TOOLCHAIN_FILE=$HOME/crosscompile_toolchain/Toolchain-RaspberryPi.cmake $HOME/training_projects/RPQT_server

и вывод:

-- The C compiler identification is GNU 4.8.3
-- The CXX compiler identification is GNU 4.8.3
-- Check for working C compiler: /home/int-krta/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc
-- Check for working C compiler: /home/int-krta/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /home/int-krta/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++
-- Check for working CXX compiler: /home/int-krta/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at /home/int-krta/Qt/5.11.1/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfigExtras.cmake:9 (message):
  Failed to find "GL/gl.h" in "/usr/include/libdrm".
Call Stack (most recent call first):
  /home/int-krta/Qt/5.11.1/gcc_64/lib/cmake/Qt5Gui/Qt5GuiConfig.cmake:171 (include)
  /home/int-krta/Qt/5.11.1/gcc_64/lib/cmake/Qt5Widgets/Qt5WidgetsConfig.cmake:89 (find_package)
  /home/int-krta/Qt/5.11.1/gcc_64/lib/cmake/Qt5/Qt5Config.cmake:28 (find_package)
  CMakeLists.txt:6 (find_package)


-- Configuring incomplete, errors occurred!
See also "/home/int-krta/crosscompile_toolchain/build/CMakeFiles/CMakeOutput.log".

Я установил библиотеки, такие как mesa-common-dev и несколько других, ничего не помогло,Я делаю что-то неправильно?Или я что-то пропустил?

РЕДАКТИРОВАТЬ: мне удалось исправить эту ошибку благодаря комментарию Цыварева, установив правильные библиотеки на машине TARGET, то есть Raspberry Pi, так что теперь cmake успешно и файлы сборки сохраняются, но когда япопробуйте использовать make У меня ошибка компоновки:

/home/int-krta/Qt/5.11.1/gcc_64/lib/libQt5Widgets.so.5.11.1: file not recognized: File format not recognized 

И если я нашел хорошее решение, мне нужно сделать свою версию Qt сейчас, поэтому в папке qtbase я запускаю команду:

./configure -release -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=$HOME/crosscompile_toolchain/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf- -sysroot /media/int-krta/rootfs -prefix /usr/local/qt5pi -no-gcc-sysroot -opensource -confirm-license

Я получаю это и не знаю, что делать дальше:

ERROR: Feature 'opengles2' was enabled, but the pre-condition 'config.win32 || (!config.watchos && !features.opengl-desktop && libs.opengl_es2)' failed.

ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

Я делаю это совершенно неправильно или что, кто-то может подсказать мне, что делать дальше?

...