OpenGLES test project on Android fails to compile
-
I did all the configuration steps and provided every directory for jdk, sdk, ant & android ndk.
I'm trying now to compile a simple test project which builds and run fine while compiling it with the desktop compiler but fails on armv7 since "error: OpenGL.so: No such file or directory"extended error:
23:25:11: Running steps for project OpenGL_ES2... 23:25:11: Configuration unchanged, skipping qmake step. 23:25:11: Starting: "D:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" D:\Android\android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ -c -Wno-psabi -march=armv7-a -mfloat-abi=softfp -mfpu=vfp -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -DANDROID -Wa,--noexecstack -fno-builtin-memmove -std=c++11 -O2 -g -g -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -mthumb -Wall -Wno-psabi -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I..\OpenGL_ES2 -I. -ID:\Qt\5.5\android_armv7\include -ID:\Qt\5.5\android_armv7\include\QtOpenGL -ID:\Qt\5.5\android_armv7\include\QtWidgets -ID:\Qt\5.5\android_armv7\include\QtGui -ID:\Qt\5.5\android_armv7\include\QtCore -I. -isystem D:\Android\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.9\include -isystem D:\Android\android-ndk-r10e\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi-v7a\include -isystem D:\Android\android-ndk-r10e\platforms\android-9\arch-arm\usr\include -ID:\Qt\5.5\android_armv7\mkspecs\android-g++ -o controller.obj ..\OpenGL_ES2\controller.cpp In file included from ..\OpenGL_ES2\controller.cpp:1:0: ..\OpenGL_ES2\controller.h: In constructor 'MainWindow::MainWindow(QWindow*)': ..\OpenGL_ES2\controller.h:36:21: warning: 'MainWindow::m_context' will be initialized after [-Wreorder] QOpenGLContext *m_context; ^ ..\OpenGL_ES2\controller.h:35:21: warning: 'QSurfaceFormat* MainWindow::fmt' [-Wreorder] QSurfaceFormat *fmt; ^ ..\OpenGL_ES2\controller.cpp:3:1: warning: when initialized here [-Wreorder] MainWindow::MainWindow(QWindow *parent) : QWindow(parent), ^ D:\Android\android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++ --sysroot=D:\Android\android-ndk-r10e/platforms/android-9/arch-arm/ -Wl,-soname,"libAndroid OpenGL.so" -Wl,--no-undefined -Wl,-z,noexecstack -shared -o libAndroid OpenGL.so main.obj controller.obj moc_controller.obj -LD:\Android\android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a -LD:\Android\android-ndk-r10e/platforms/android-9/arch-arm//usr/lib -LD:/Qt/5.5/android_armv7/lib -lQt5OpenGL -Lc:\utils\android\ndk/sources/cxx-stl/gnu-libstdc++/4.8/libs/armeabi-v7a -Lc:\utils\android\ndk/platforms/android-9/arch-arm//usr/lib -lQt5Widgets -lQt5Gui -lQt5Core -lGLESv2 -lgnustl_shared -llog -lz -lm -ldl -lc -lgcc arm-linux-androideabi-g++: error: OpenGL.so: No such file or directory makefile:83: recipe for target 'libAndroid' failed mingw32-make: *** [libAndroid] Error 1 23:25:13: The process "D:\Qt\Tools\mingw492_32\bin\mingw32-make.exe" exited with code 2. Error while building/deploying project OpenGL_ES2 (kit: Android for armeabi-v7a (GCC 4.9, Qt 5.5.1)) When executing step "Make" 23:25:13: Elapsed time: 00:02.
here's the source.cpp:
#include "controller.h" MainWindow::MainWindow(QWindow *parent) : QWindow(parent), m_context(0), fmt(new QSurfaceFormat) { setSurfaceType(QWindow::OpenGLSurface); //fmt->setRenderableType(QSurfaceFormat::OpenGLES); //fmt->setVersion(2,0); //fmt->setProfile(QSurfaceFormat::CoreProfile); //I'll need later fmt to try and set an alpha buffer on it fmt = new QSurfaceFormat(requestedFormat()); resize(640,480); setFormat(requestedFormat()); m_context = new QOpenGLContext(this); m_context->setFormat(requestedFormat()); m_context->create(); } void MainWindow::render() { if (!isExposed()) return; m_context->makeCurrent(this); initializeOpenGLFunctions(); QTime t; t = QTime::currentTime(); glClearColor(1, 0.5f, 0, 0.5f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_context->swapBuffers(this); QCoreApplication::postEvent(this, new QEvent(QEvent::UpdateRequest)); }
Lastly the .pro file:
TEMPLATE = app TARGET = Android OpenGL QT += core gui opengl SOURCES += \ main.cpp \ controller.cpp HEADERS += \ controller.h CONFIG += mobility MOBILITY =
Unfortunately this is the first time I try to build a project targeted for android and it all seems fine while compiling for desktop but it crashes on arm7
Is something missing in the ndk? I don't even know where i'm supposed to place the missing opengl.so nor how to compile it -
Hi and welcome to devnet,
I'd remove the space between Android and OpenGL in your TARGET directive.
-
Awkward moment of the day I guess
Quick unrelated question: Is it possible to have a format that can make the opengl application's background transparent?
in the desktop it's sufficient to use :
fmt->setAlphaBufferSize(8);
for the desired effectAnyway, thanks a lot for your help
EDIT: nevermind, I solved it. you only need to change the manifest and apply android:theme="@android:style/Theme.Translucent" to the application tag
-
Glad you found out and thanks for sharing !
Since you have it working now please mark the thread as solved using the"Topic Tool" button so that other forum users may know a solution has been found :)