Re: QT3 - OpenGL

Paul Mitterberger <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
Ich schon wieder!

Nun habe ich erst heute wieder Zeit gefunden daran weiterzuarbeiten, wobei es 
mir weiterhin nicht gelang, die OpenGL-Beispiele von qt3 zu kompilieren 
(siehe alte Fehlermeldung unten).

Die Includes zu OpenGL habe ich in /usr/include/GL und die LIBS
in  /usr/lib bzw. /usr/lib/GL gefunden.
Daher dachte ich mir folgendes in box.pro müsste weiterhelfen.

LIBS            += -lMesaGL -lMesaGLU -L/usr/lib/GL
REQUIRES        = opengl
TEMPLATE        = app
CONFIG          += qt opengl warn_on release
HEADERS         = glbox.h \
                  globjwin.h
SOURCES         = glbox.cpp \
                  globjwin.cpp \
                  main.cpp
TARGET          = box
DEPENDPATH      = $/QTDIR)/include    
# vormals ../include, das es unter /usr/lib/qt3/doc/examples/opengl/ 
# aber nicht gibt ???

Das Makefile sieht dann so  aus:
Schnipp 8< ---------- 
#############################################################################
# Makefile for building: box
# Generated by qmake (1.06c) (Qt 3.2.1) on: Thu Dec  2 20:41:57 2004
# Project:  box.pro
# Template: app
# Command: $(QMAKE) -o Makefile2 box.pro
#############################################################################

QMAKE    = qmake
all clean install distclean mocables uninstall uicables:
        @echo "Some of the required modules (opengl) are not available."
        @echo "Skipped."

Makefile2: box.pro  /usr/lib/qt3/mkspecs/default/qmake.conf
        $(QMAKE) -o Makefile2 box.pro
qmake:
        @$(QMAKE) -o Makefile2 box.pro
---------->8  Schnapp 

Ein Ausdokumentieren von REQUIRES  = opengl
erzeugt ein Makefile, das folgende Fehler ausgibt, wobei zu sehen ist, dass 
-lGL und -lGLU von qmake automatisch hinzugefügt wird (siehe Anhang 
qmake.conf aus dem Verzeichnis /usr/lib/qt3/mkspecs/linux-g++) :

g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC -Wall -W -O2 
-march=i586 -mcpu=i686 -fmessage-length=0 -fPIC  -DQT_NO_DEBUG -DQT_SHARED 
-DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include/GL -I/
usr/include -I/usr/lib/qt3/include -I/usr/include -I/usr/X11R6/include -o 
glbox.o glbox.cpp
g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC -Wall -W -O2 
-march=i586 -mcpu=i686 -fmessage-length=0 -fPIC  -DQT_NO_DEBUG -DQT_SHARED 
-DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include/GL -I/
usr/include -I/usr/lib/qt3/include -I/usr/include -I/usr/X11R6/include -o 
globjwin.o globjwin.cpp
g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC -Wall -W -O2 
-march=i586 -mcpu=i686 -fmessage-length=0 -fPIC  -DQT_NO_DEBUG -DQT_SHARED 
-DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include/GL -I/
usr/include -I/usr/lib/qt3/include -I/usr/include -I/usr/X11R6/include -o 
main.o main.cpp
g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC -Wall -W -O2 
-march=i586 -mcpu=i686 -fmessage-length=0 -fPIC  -DQT_NO_DEBUG -DQT_SHARED 
-DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include/GL -I/
usr/include -I/usr/lib/qt3/include -I/usr/include -I/usr/X11R6/include -o 
moc_glbox.o moc_glbox.cpp
g++ -c -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC -Wall -W -O2 
-march=i586 -mcpu=i686 -fmessage-length=0 -fPIC  -DQT_NO_DEBUG -DQT_SHARED 
-DQT_TABLET_SUPPORT -I/usr/lib/qt3/mkspecs/default -I. -I/usr/include/GL -I/
usr/include -I/usr/lib/qt3/include -I/usr/include -I/usr/X11R6/include -o 
moc_globjwin.o moc_globjwin.cpp
g++  -o box glbox.o globjwin.o main.o moc_glbox.o moc_globjwin.o  -L/usr/lib/ 
-L/usr/lib/qt3/lib/ -L/usr/lib/ -L/usr/X11R6/lib/ -L/usr/lib/GL -lqt -lGLU 
-lGL -lXmu -lXext -lX11 -lm
glbox.o(.text+0x3c): In function `GLBox::GLBox[not-in-charge](QWidget*, char 
const*)':
: undefined reference to `QGLWidget::QGLWidget[not-in-charge](QWidget*, char 
const*, QGLWidget const*, unsigned)'
glbox.o(.text+0xcc): In function `GLBox::GLBox[in-charge](QWidget*, char 
const*)':
: undefined reference to `QGLWidget::QGLWidget[not-in-charge](QWidget*, char 
const*, QGLWidget const*, unsigned)'
glbox.o(.text+0x15a): In function `GLBox::~GLBox [not-in-charge]()':
: undefined reference to `QGLWidget::makeCurrent()'
glbox.o(.text+0x178): In function `GLBox::~GLBox [not-in-charge]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x196): In function `GLBox::~GLBox [not-in-charge]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x1ea): In function `GLBox::~GLBox [in-charge]()':
: undefined reference to `QGLWidget::makeCurrent()'
glbox.o(.text+0x208): In function `GLBox::~GLBox [in-charge]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x226): In function `GLBox::~GLBox [in-charge]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x27a): In function `GLBox::~GLBox [in-charge deleting]()':
: undefined reference to `QGLWidget::makeCurrent()'
glbox.o(.text+0x298): In function `GLBox::~GLBox [in-charge deleting]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x2b7): In function `GLBox::~GLBox [in-charge deleting]()':
: undefined reference to `QGLWidget::~QGLWidget [not-in-charge]()'
glbox.o(.text+0x3ea): In function `GLBox::initializeGL()':
: undefined reference to `QGLWidget::qglClearColor(QColor const&) const'
glbox.o(.text+0x4f6): In function `GLBox::makeObject()':
: undefined reference to `QGLWidget::qglColor(QColor const&) const'
main.o(.text+0x46): In function `main':
: undefined reference to `QGLFormat::hasOpenGL()'
moc_glbox.o(.text+0x171): In function `GLBox::staticMetaObject()':
: undefined reference to `QGLWidget::staticMetaObject()'
moc_glbox.o(.text+0x248): In function `GLBox::qt_cast(char const*)':
: undefined reference to `QGLWidget::qt_cast(char const*)'
moc_glbox.o(.text+0x2ba): In function `GLBox::qt_invoke(int, QUObject*)':
: undefined reference to `QGLWidget::qt_invoke(int, QUObject*)'
moc_glbox.o(.text+0x357): In function `GLBox::qt_emit(int, QUObject*)':
: undefined reference to `QGLWidget::qt_emit(int, QUObject*)'
moc_glbox.o(.text+0x39e): In function `GLBox::qt_property(int, int, 
QVariant*)':
: undefined reference to `QGLWidget::qt_property(int, int, QVariant*)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0xac): undefined reference to 
`QGLWidget::setMouseTracking(bool)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x108): undefined reference to 
`QGLWidget::reparent(QWidget*, unsigned, QPoint const&, bool)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x148): undefined reference to 
`QGLWidget::paintEvent(QPaintEvent*)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x150): undefined reference to 
`QGLWidget::resizeEvent(QResizeEvent*)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1c0): undefined reference to 
`QGLWidget::makeCurrent()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1c4): undefined reference to 
`QGLWidget::swapBuffers()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1c8): undefined reference to 
`QGLWidget::setFormat(QGLFormat const&)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1cc): undefined reference to 
`QGLWidget::setContext(QGLContext*, QGLContext const*, bool)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1d0): undefined reference to 
`QGLWidget::renderPixmap(int, int, bool)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1d4): undefined reference to 
`QGLWidget::grabFrameBuffer(bool)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1d8): undefined reference to 
`QGLWidget::makeOverlayCurrent()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1dc): undefined reference to 
`QGLWidget::updateGL()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1e0): undefined reference to 
`QGLWidget::updateOverlayGL()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1f0): undefined reference to 
`QGLWidget::initializeOverlayGL()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1f4): undefined reference to 
`QGLWidget::resizeOverlayGL(int, int)'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1f8): undefined reference to 
`QGLWidget::paintOverlayGL()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x1fc): undefined reference to 
`QGLWidget::glInit()'
moc_glbox.o(.gnu.linkonce.d._ZTV5GLBox+0x200): undefined reference to 
`QGLWidget::glDraw()'
moc_glbox.o(.gnu.linkonce.d._ZTI5GLBox+0x8): undefined reference to `typeinfo 
for QGLWidget'
collect2: ld returned 1 exit status
make: *** [box] Fehler 1


Ein zusatzliches Einfügen von INCLUDEPATH += /usr/include/GL in box.pro
bringt keine Änderung der Fehlermeldung.

Hier noch eine Kurzinfo zu meinem System:
SuSE 9.0 Prof. (inkl. aller Patches)
Installiert:
 - mesaglut & mesaglut-devel 5.0.1-161
 - XFree86-Mesa & XFree86-Mesa-devel  4.3.0.1-21
 - qt3 3.2.1-68 & qt3-devel 3.2.1-34
 - NVIDIA-Treiber NVIDIA-Linux-x86-1.0-6106-pkg1.run

Betrieben wird alles an einer NVIDIA FX5600 (2 Monitoren an der Karte 
angeschlossen mit unterschiedlichen Auflösungen 1280x1024 und 1024x768, bzw. 
letzterer virtuelle Oberfläche 1024x1024).
 
Kann mir jemand sagen, wo hier der Hund begraben liegt?

Grüße

Paul Mitterberger



Am Donnerstag, 18. November 2004 12:25 schrieb Stefan Hundhammer:
> On Thursday 18 November 2004 11:09, Paul Mitterberger wrote:
> > QMAKE    = qmake
> > all clean install distclean mocables uninstall uicables:
> >         @echo "Some of the required modules (opengl) are not available."
> >         @echo "Skipped."
> >
> > Makefile: box.pro  /usr/lib/qt3/mkspecs/default/qmake.conf
> >         $(QMAKE) -o Makefile box.pro
> > qmake:
> >         @$(QMAKE) -o Makefile box.pro
>
> Unser Qt-Maintainer hat gerade gesagt, Du mußt die OpenGL-Libs manuell
> dazulinken (-l irgendwas), da unsere Qt-Lib OpenGL-Unterstützung nicht
> statisch dazugelinkt hat, um (meistens unnötige) Abhängigkeiten von
> OpenGL-Libs und deren Paketen zu minimieren.
>
> Jetzt mußt Du nur noch herausbekommen, welche Du genau brauchst (das hat er
> mir beim Vorbeiflug nicht verraten) - GL, GLU, MesaGL, MesaGLU.
> Ausprobieren hilft.
>
>
> CU
> --
> Stefan Hundhammer <[email protected]>                Penguin by conviction.
> YaST2 Development
> SUSE Linux Products GmbH
> Nuernberg, Germany

-- 
[email protected]

-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
qmake.conf (text/plain, 2.3 KB)
#
# $Id: qt/qmake.conf   3.2.1   edited May 13 09:08 $
#
# qmake configuration for linux-g++
#

MAKEFILE_GENERATOR	= UNIX
TEMPLATE		= app
CONFIG			+= qt warn_on release incremental link_prl
QMAKE_INCREMENTAL_STYLE = sublib

QMAKE_CC		= gcc
QMAKE_LEX		= flex
QMAKE_LEXFLAGS		= 
QMAKE_YACC		= yacc
QMAKE_YACCFLAGS		= -d
QMAKE_CFLAGS            = -pipe -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC
QMAKE_CFLAGS_DEPS	= -M
QMAKE_CFLAGS_WARN_ON	= -Wall -W
QMAKE_CFLAGS_WARN_OFF	= -w
QMAKE_CFLAGS_RELEASE    = -O2 -march=i586 -mcpu=i686 -fmessage-length=0 -fPIC
QMAKE_CFLAGS_DEBUG	= -g
QMAKE_CFLAGS_SHLIB	= -fPIC
QMAKE_CFLAGS_YACC	= -Wno-unused -Wno-parentheses
QMAKE_CFLAGS_THREAD	= -D_REENTRANT

QMAKE_CXX		= g++
QMAKE_CXXFLAGS		= $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS	= $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON	= $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF	= $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE	= $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG	= $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_SHLIB	= $$QMAKE_CFLAGS_SHLIB
QMAKE_CXXFLAGS_YACC	= $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD	= $$QMAKE_CFLAGS_THREAD

QMAKE_INCDIR            = /usr/include/
QMAKE_LIBDIR            = /usr/lib/
QMAKE_INCDIR_X11	= /usr/X11R6/include
QMAKE_LIBDIR_X11        = /usr/X11R6/lib/
QMAKE_INCDIR_QT		= $(QTDIR)/include
QMAKE_LIBDIR_QT         = $(QTDIR)/lib/
QMAKE_INCDIR_OPENGL     = /usr/include/
QMAKE_LIBDIR_OPENGL     = /usr/lib/

QMAKE_LINK		= g++
QMAKE_LINK_SHLIB	= g++
QMAKE_LFLAGS		=
QMAKE_LFLAGS_RELEASE	=
QMAKE_LFLAGS_DEBUG	=
QMAKE_LFLAGS_SHLIB	= -shared
QMAKE_LFLAGS_PLUGIN	= $$QMAKE_LFLAGS_SHLIB
QMAKE_LFLAGS_SONAME	= -Wl,-soname,
QMAKE_LFLAGS_THREAD	=

QMAKE_LIBS		=
QMAKE_LIBS_DYNLOAD	= -ldl
QMAKE_LIBS_X11		= -lXext -lX11 -lm
QMAKE_LIBS_X11SM	= -lSM -lICE
QMAKE_LIBS_NIS		= -lnsl
QMAKE_LIBS_QT		= -lqt
QMAKE_LIBS_QT_THREAD	= -lqt-mt
QMAKE_LIBS_OPENGL	= -lGLU -lGL -lXmu
QMAKE_LIBS_OPENGL_QT	= -lGL -lXmu
QMAKE_LIBS_THREAD	= -lpthread

QMAKE_MOC		= $(QTDIR)/bin/moc
QMAKE_UIC		= $(QTDIR)/bin/uic

QMAKE_AR		= ar cqs
QMAKE_RANLIB		=

QMAKE_TAR		= tar -cf
QMAKE_GZIP		= gzip -9f

QMAKE_COPY		= cp -f
QMAKE_COPY_FILE         = $(COPY)
QMAKE_COPY_DIR          = $(COPY) -r
QMAKE_MOVE		= mv -f
QMAKE_DEL_FILE		= rm -f
QMAKE_DEL_DIR		= rmdir
QMAKE_STRIP             = strip
QMAKE_STRIPFLAGS_LIB 	+= --strip-unneeded
QMAKE_CHK_DIR_EXISTS	= test -d
QMAKE_MKDIR		= mkdir -p
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.