Question

I'm trying to cross compile QT5 static apps. It works fine for console apps, but not for graphical apps. Here's everithing:

main.cpp :

#if defined(_WIN32) || defined (_WIN64)
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
#endif
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[]) {
  QApplication app(argc, argv);
  MainWindow *m = new MainWindow();
  m->show();
  return app.exec();
}

MainWindow.cpp :

#include "MainWindow.h"
MainWindow::MainWindow() {
  widget.setupUi(this);
} 
MainWindow::~MainWindow() {
}

MainWindow.h :

#pragma once
#include "ui_MainWindow.h"
class MainWindow : public QMainWindow {
  Q_OBJECT
public:
  MainWindow();
  virtual ~MainWindow();
private:
  Ui::MainWindow widget;
};

MainWindow.ui :

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>99</width>
    <height>40</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QPushButton" name="pushButton">
      <property name="text">
       <string>PushButton</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

win32.pro :

DESTDIR = win32/dest
TARGET = TestQT5
VERSION = 1.0.0
CONFIG += release static
PKGCONFIG +=
QT = core gui widgets
static {
    CONFIG += static
    QTPLUGIN += qcore qgui qwidgets
    DEFINES += STATIC
}
SOURCES += MainWindow.cpp main.cpp
HEADERS += MainWindow.h
FORMS += MainWindow.ui
RESOURCES +=
TRANSLATIONS +=
OBJECTS_DIR = win32/obj
MOC_DIR = win32/moc
RCC_DIR = win32/rcc
UI_DIR = win32/ui
QMAKE_CC = /usr/bin/i686-w64-mingw32-gcc
QMAKE_CXX = /usr/bin/i686-w64-mingw32-g++
DEFINES += QT_NODLL
INCLUDEPATH += \
/usr/i686-w64-mingw32/include/qt/QtPlatformSupport \
/usr/i686-w64-mingw32/include/qt/QtCore \
/usr/i686-w64-mingw32/include/qt/QtGui \
/usr/i686-w64-mingw32/include/qt/QtWidgets
LIBS += \
/usr/i686-w64-mingw32/lib/libQt5PlatformSupport.a \
/usr/i686-w64-mingw32/lib/libQt5Core.a \
/usr/i686-w64-mingw32/lib/libQt5Gui.a \
/usr/i686-w64-mingw32/lib/libQt5Widgets.a \
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a
equals(QT_MAJOR_VERSION, 4) {
    QMAKE_CXXFLAGS += -std=c++11
}
equals(QT_MAJOR_VERSION, 5) {
    CONFIG += c++11
}

then I run

/usr/bin/i686-w64-mingw32-qmake-qt5 -o Makefile win32.pro
make

and obtain:

make -f Makefile.Release
make[1]: Entering directory '/mnt/DATI/Projects/Personal/TestQT5'
i686-w64-mingw32-g++ -g -static -Wl,-subsystem,windows -mthreads -o win32/dest/TestQT5.exe win32/obj/TestQT5_resource_res.o win32/obj/MainWindow.o win32/obj/main.o win32/obj/moc_MainWindow.o  -lglu32 -lopengl32 -lmingw32 -lqt5main /usr/i686-w64-mingw32/lib/libQt5PlatformSupport.a /usr/i686-w64-mingw32/lib/libQt5Core.a /usr/i686-w64-mingw32/lib/libQt5Gui.a /usr/i686-w64-mingw32/lib/libQt5Widgets.a /usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a -L/usr/i686-w64-mingw32/lib -lQt5Widgets -lQt5Gui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -ljpeg -lpng -lQt5Core -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -lz -lpcre16 
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowsintegration.o): In function `ZN23QWindowsNativeInterface24nativeResourceForContextERK10QByteArrayP14QOpenGLContext':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowsintegration.cpp:208: undefined reference to `QEGLPlatformContext::eglContext() const'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowsintegration.cpp:206: undefined reference to `QEGLPlatformContext::eglDisplay() const'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowsintegration.cpp:210: undefined reference to `QEGLPlatformContext::eglConfig() const'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `~QWindowsEGLContext':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:134: undefined reference to `QEGLPlatformContext::~QEGLPlatformContext()'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `ZN18QWindowsEGLContext11makeCurrentEP16QPlatformSurface':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:157: undefined reference to `QEGLPlatformContext::eglConfig() const'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:158: undefined reference to `QEGLPlatformContext::eglContext() const'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:158: undefined reference to `QEGLPlatformContext::eglDisplay() const'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:158: undefined reference to `_imp__eglMakeCurrent@16'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:161: undefined reference to `_imp__eglGetError@0'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `ZN24QWindowsEGLStaticContext6createEv':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:79: undefined reference to `_imp__eglGetDisplay@4'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:87: undefined reference to `_imp__eglInitialize@12'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:89: undefined reference to `_imp__eglGetError@0'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `ZN24QWindowsEGLStaticContextD2Ev':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:102: undefined reference to `_imp__eglTerminate@4'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `ZN18QWindowsEGLContextC2ERK14QSharedPointerI24QWindowsEGLStaticContextERK14QSurfaceFormatP22QPlatformOpenGLContext':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:130: undefined reference to `QEGLPlatformContext::QEGLPlatformContext(QSurfaceFormat const&, QPlatformOpenGLContext*, void*, unsigned int)'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o): In function `ZN18QWindowsEGLContextD2Ev':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowseglcontext.cpp:134: undefined reference to `QEGLPlatformContext::~QEGLPlatformContext()'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o):qwindowseglcontext.cpp:(.rdata$_ZTV18QWindowsEGLContext[__ZTV18QWindowsEGLContext]+0x10): undefined reference to `QEGLPlatformContext::format() const'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o):qwindowseglcontext.cpp:(.rdata$_ZTV18QWindowsEGLContext[__ZTV18QWindowsEGLContext]+0x14): undefined reference to `QEGLPlatformContext::swapBuffers(QPlatformSurface*)'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o):qwindowseglcontext.cpp:(.rdata$_ZTV18QWindowsEGLContext[__ZTV18QWindowsEGLContext]+0x20): undefined reference to `QEGLPlatformContext::doneCurrent()'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowseglcontext.o):qwindowseglcontext.cpp:(.rdata$_ZTV18QWindowsEGLContext[__ZTV18QWindowsEGLContext]+0x2c): undefined reference to `QEGLPlatformContext::getProcAddress(QByteArray const&)'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowswindow.o): In function `ZN14QWindowsWindow22ensureEglSurfaceHandleERK14QSharedPointerI24QWindowsEGLStaticContextEPv':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowswindow.cpp:2128: undefined reference to `_imp__eglCreateWindowSurface@16'
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowswindow.cpp:2132: undefined reference to `_imp__eglGetError@0'
/usr/i686-w64-mingw32/lib/qt/plugins/platforms/libqwindows.a(qwindowswindow.o): In function `ZN14QWindowsWindow13destroyWindowEv':
/build/mingw-w64-qt5-base-static/src/qtbase-opensource-src-5.2.1/src/plugins/platforms/windows/qwindowswindow.cpp:967: undefined reference to `_imp__eglDestroySurface@8'
/usr/i686-w64-mingw32/lib/libQt5Gui.a(qopenglcontext.o):(.text+0x329): undefined reference to `_imp__glGetIntegerv@8'
/usr/i686-w64-mingw32/lib/libQt5Gui.a(qopenglcontext.o):(.text+0x2632): undefined reference to `_imp__glFlush@0'
/usr/lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld: /usr/i686-w64-mingw32/lib/libQt5Gui.a(qopenglcontext.o): bad reloc address 0x2 in section `.text$_ZN26QOpenGLSharedResourceGuardD1Ev[__ZN26QOpenGLSharedResourceGuardD1Ev]'
collect2: error: ld returned 1 exit status
Makefile.Release:84: recipe for target 'win32/dest/TestQT5.exe' failed
make[1]: *** [win32/dest/TestQT5.exe] Error 1
make[1]: Leaving directory '/mnt/DATI/Projects/Personal/TestQT5'
Makefile:34: recipe for target 'release' failed
make: *** [release] Error 2

I already tried to include in INCLUDEPATH and LIBS libGLESv2.a, libEGL.a, glu32.a, glut32.a, opengl32.a (all existing in the include path) but the error remains exactly the same.

you can download the files from http://db.tt/4nro6wuv

Can you help me find what's missing? Thanks.

No correct solution

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top