#qt #opengl-es #arm #cross-compiling
#qt #opengl-es #arm #перекрестная компиляция
Вопрос:
Я компилирую Qt 5.3 для ARM со следующим qmake.conf
:
MAKEFILE_GENERATOR = UNIX
CONFIG = incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g -unix.conf)
load(device_config)
QT_QPA_DEFAULT_PLATFORM = eglfs
# modifications to g .conf
QMAKE_CC = $${CROSS_COMPILE}gcc
QMAKE_CXX = $${CROSS_COMPILE}g
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_LINK_SHLIB = $${QMAKE_CXX}
# modifications to linux.conf
QMAKE_AR = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
QMAKE_STRIP = $${CROSS_COMPILE}strip
COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp
#modifications to gcc-base.conf
QMAKE_CFLAGS = $${COMPILER_FLAGS}
QMAKE_CXXFLAGS = $${COMPILER_FLAGS}
QMAKE_CXXFLAGS_RELEASE = -O3
QMAKE_LIBS = -lrt -lpthread -ldl
# Extra stuff (OpenGL, DirectFB, ...)
QMAKE_INCDIR_EGL = $$[QT_SYSROOT]/usr/include:/usr/arm-linux-gnueabi/include/
QMAKE_LIBDIR_EGL = $$[QT_SYSROOT]/usr/lib:/usr/arm-linux-gnueabi/lib/:/usr/lib/x86_64-linux-gnu/
QMAKE_INCDIR_OPENGL = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENGL = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}
QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
QMAKE_LIBS_OPENGL = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}
# Sanity check
deviceSanityCheckCompiler()
load(qt_config)
У меня установлены пакеты разработки OpenGL ES
ii libgles2-mesa:amd64 10.3.0~git20140618.88b887fa-0ubuntu0ricotz~trusty amd64 free implementation of the OpenGL|ES 2.x API -- runtime
ii libgles2-mesa-dbg:amd64 10.3.0~git20140618.88b887fa-0ubuntu0ricotz~trusty amd64 free implementation of the OpenGL|ES 2.x API -- debugging symbols
ii libgles2-mesa-dev 10.3.0~git20140618.88b887fa-0ubuntu0ricotz~trusty amd64 free implementation of the OpenGL|ES 2.x API -- development files
После запуска моей настройки :
configure -opengl es2 -skip qtwebkit -skip qtdeclarative -no-sse4.2 -no-sse4.1 -no-sse3 -no-sse2 -no-cups -no-openssl -no-kms -no-nis -no-pch -no-mips_dspr2 -no-mips_dsp -no-accessibility -opensource -confirm-license -device-option CROSS_COMPILE=arm-linux-gnueabi- -no-xcb -qt-zlib -qt-libjpeg -qt-libpng -prefix ~/programming/tools/qt/qt-arm-5.3 -platform linux-g -xplatform linux-arm-gnueabi-g -device linux-arm-cortex9-mine-g -v
В итоге я получаю следующее :
OpenGL ES 2.x auto-detection... ()
arm-linux-gnueabi-g -c -pipe -march=armv7-a -mtune=cortex-a9 -mfloat-abi=softfp -O2 -O3 -Wall -W -fPIE -I/home/USER/programming/tools/qt/qt-everywhere-opensource-src-5.3.0/qtbase/mkspecs/devices/linux-arm-cortex9-mine-g -I/home/USER/programming/tools/qt/qt-everywhere-opensource-src-5.3.0/qtbase/config.tests/unix/opengles2 -I/usr/include:/usr/arm-linux-gnueabi/include/ -I. -o opengles2.o /home/USER/programming/tools/qt/qt-everywhere-opensource-src-5.3.0/qtbase/config.tests/unix/opengles2/opengles2.cpp
arm-linux-gnueabi-g -Wl,-O1 -o opengles2 opengles2.o -lrt -lpthread -ldl -lGLESv2 -lEGL -lIMGegl -lsrv_um
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lGLESv2
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lEGL
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lIMGegl
/usr/lib/gcc-cross/arm-linux-gnueabi/4.7/../../../../arm-linux-gnueabi/bin/ld: cannot find -lsrv_um
collect2: error: ld returned 1 exit status
make: *** [opengles2] Error 1
OpenGL ES 2.x disabled.
The OpenGL ES 2.0 functionality test 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
/home/USER/programming/tools/qt/qt-everywhere-opensource-src-5.3.0/qtbase/mkspecs/devices/linux-arm-cortex9-mine-g .
Мои библиотеки расположены здесь (я думаю, это то, что он ищет) :
$ ll /usr/lib/x86_64-linux-gnu/libGLESv2.so
lrwxrwxrwx 1 root root 21 cze 18 08:38 /usr/lib/x86_64-linux-gnu/libGLESv2.so -> mesa-egl/libGLESv2.so
Комментарии:
1.Это ваш хост
libGLESv2
. Вам нужен кросс-скомпилированный файл в вашем системном корне. Где это?2. @peppe Я только что пришел к такому же выводу, но проблема в том, что я просто хотел скомпилировать его, чтобы проверить, смогу ли я это сделать, когда получу свою плату ARM cortex-a9. Где я могу получить двоичные файлы ARM для OpenGL ES 2.0 или как я могу это создать? Единственное, что мне удалось найти, это заголовки OpenGL ES.
Ответ №1:
Я пытался связать x86
библиотеки для своей сборки ARM и по собственному невежеству не знал, что OpenGL — это просто стандарт, поэтому доступны только заголовки.
Таким образом, решением моей проблемы было бы скомпилировать некоторую реализацию OpenGL ES, например, mesa3d для ARM, а затем связать эти двоичные файлы с Qt.
Комментарии:
1. Вы это сделали? Можете ли вы предоставить руководство? Я застрял на этом этапе