Seite 1 von 1

Fehler beim compilieren (Unresolved external 'qMain...)

Verfasst: 26. März 2005 22:04
von data
hi,

bin z.z. an einem windowsrechner und beabsichtigte ein mittel qtdesigner erstelltes mini-programm am laufen zu bekommen, jedoch scheitert es mit folgender fehlermeldung:

Code: Alles auswählen

qmake -project
qmake test.pro
make

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
tmp\moc\release_mt_shared\moc_form1.cpp:
        ilink32 @MAKE0000.@@@
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: Unresolved external 'qMain(int, char * *)' referenced from C:\QT\3.2.1NON
COMMERCIAL\LIB\QTMAIN.LIB|qtmain_win

** error 2 ** deleting test.exe
os: windows xt sp2
compiler: Borland C++ 5.5.1 for Win32
qt: 3.2

das mittels qmake erzeugte makefile:

Code: Alles auswählen

#############################################################################
# Makefile for building: test
# Generated by qmake (1.06c) (Qt 3.2.1) on: Sat Mar 26 21:56:36 2005
# Project:  test.pro
# Template: app
# Command: $(QMAKE) -o Makefile test.pro
#############################################################################

!if !$d(BCB)
BCB = $(MAKEDIR)\..
!endif

####### Compiler, tools and options

CC	=	bcc32
CXX	=	bcc32
LEX     = flex
YACC    = byacc
CFLAGS	=	-tWR -w -w-hid -tWM -O2 -x- -RT-  -DUNICODE -DQT_NON_COMMERCIAL -DQT_DLL -DQT_THREAD_SUPPORT -DQT_ACCESSIBILITY_SUPPORT -DQT_TABLET_SUPPORT -DQT_NO_DEBUG
CXXFLAGS=	-tWR -w -w-hid -tWM -O2 -x- -RT-  -DUNICODE -DQT_NON_COMMERCIAL -DQT_DLL -DQT_THREAD_SUPPORT -DQT_ACCESSIBILITY_SUPPORT -DQT_TABLET_SUPPORT -DQT_NO_DEBUG
LEXFLAGS=
YACCFLAGS=-d
INCPATH	=	 -I"." -I"$(QTDIR)\include" -I"" -I"C:\Qt\3.2.1NonCommercial\Meine_Projekte\test" -I"tmp\moc\release_mt_shared" -I"C:\Qt\3.2.1NonCommercial\mkspecs\win32-borland"
LINK	=	ilink32
LFLAGS	=	-L$(BCB)\lib;$(QTDIR)\lib -c -x -Gn /dopengl32.dll -aa -Tpe c0w32.obj
LIBS	=	import32.lib qtmtnc321.lib qtmain.lib cw32mti.lib
MOC	=	$(QTDIR)\bin\moc.exe
UIC	=	$(QTDIR)\bin\uic.exe
QMAKE =       qmake
IDC		=	$(QTDIR)\bin\idc.exe
IDL		=	midl
ZIP	=	zip -r -9
DEF_FILE =	
RES_FILE =	
COPY_FILE  =       copy
COPY_DIR  =       copy
DEL_FILE   =       del
DEL_DIR    =       rmdir
MOVE  =       move
CHK_DIR_EXISTS =	if not exist
MKDIR		=	mkdir

####### Files

HEADERS =	
SOURCES =	
OBJECTS =	tmp\obj\release_mt_shared\form1.obj
FORMS =	form1.ui
UICDECLS =	form1.h
UICIMPLS =	form1.cpp
SRCMOC	=	tmp\moc\release_mt_shared\moc_form1.cpp
OBJMOC	=	tmp\obj\release_mt_shared\moc_form1.obj
DIST	=	
TARGET	=	test.exe

####### Implicit rules

.SUFFIXES: .c .cpp .cc .cxx .C

.cpp.obj:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o$@ $<

.cc.obj:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o$@ $<

.cxx.obj:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o$@ $<

.C.obj:
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o$@ $<

.c.obj:
	$(CC) -c $(CFLAGS) $(INCPATH) -o$@ $<

####### Build rules

all: Makefile  $(TARGET)

$(TARGET):  $(UICDECLS) $(OBJECTS) $(OBJMOC) 
	$(LINK) @&&|
	$(LFLAGS) $(OBJECTS) $(OBJMOC),$(TARGET),,$(LIBS),$(DEF_FILE),$(RES_FILE)
|


mocables: $(SRCMOC)
uicables: $(UICIMPLS) $(UICDECLS)

Makefile: test.pro ..\..\.qmake.cache C:\Qt\3.2.1NonCommercial\mkspecs\win32-borland\qmake.conf ..\..\lib\qtmain.prl
	$(QMAKE) -o Makefile test.pro
qmake: 
	@$(QMAKE) -o Makefile test.pro

dist:
	$(ZIP) test.zip $(SOURCES) $(HEADERS) $(DIST) $(FORMS) C:/Qt/3.2.1NonCommercial/Meine_Projekte/test/test.pro ..\..\lib\qtmain.prl  

uiclean:
	-$(DEL_FILE) form1.h
	-$(DEL_FILE) form1.cpp
mocclean:
	-$(DEL_FILE) tmp\moc\release_mt_shared\moc_form1.cpp
	-$(DEL_FILE) tmp\obj\release_mt_shared\moc_form1.obj
clean: uiclean mocclean
	-$(DEL_FILE) tmp\obj\release_mt_shared\form1.obj
	-$(DEL_FILE) test.tds


distclean: clean
	-$(DEL_FILE) $(TARGET)

####### Compile

form1.h: form1.ui 
	$(UIC) form1.ui -o form1.h

form1.cpp: form1.h form1.ui 
	$(UIC) form1.ui -i form1.h -o form1.cpp

tmp\obj\release_mt_shared\form1.obj: form1.cpp form1.h
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -otmp\obj\release_mt_shared\form1.obj form1.cpp

tmp\obj\release_mt_shared\moc_form1.obj: tmp\moc\release_mt_shared\moc_form1.cpp form1.h 
	$(CXX) -c $(CXXFLAGS) $(INCPATH) -otmp\obj\release_mt_shared\moc_form1.obj tmp\moc\release_mt_shared\moc_form1.cpp

tmp\moc\release_mt_shared\moc_form1.cpp: $(MOC) form1.h
	$(MOC) form1.h -o tmp\moc\release_mt_shared\moc_form1.cpp

####### Install

install: all 

uninstall: 
was läuft hier schief, unter linux klappt alles wunderbar?
habe mal irgendetwas von einem bug mit dem borland compiler gelsen, aber finde es nicht mehr.

cu...
daniel

Verfasst: 31. März 2005 11:04
von Flachkoepper
Bin zwar auch nur Anfänger, aber so wie ich das sehe, hast du keine main-Funktion in deinem Programm. Im Designer einfach dein Projekt öffnen und unter Datei->Neu ein main.cpp hinzufügen, dann sollte es klappen.

Viele Grüße,
Flachkoepper

Gleiches Problem

Verfasst: 2. September 2005 15:02
von Thomas Haas
Hallo, ich hab das gleiche Problem. Wenn ich versuche meine Anwendung zu bauen bekomme ich bei der Ausführung des make Kommandos (Qt Open Source 4.0.1) die folgende Fehlermeldung:

udefined reference to 'qMain(int, char**)'

Kann mir jemand helfen ?

Verfasst: 2. September 2005 20:06
von AHUser
Da fehlt wohl ein "-DQT_NEEDS_QMAIN" bei den Defines
habe mal irgendetwas von einem bug mit dem borland compiler gelsen, aber finde es nicht mehr.
Manche bezeichnen es als Bug, andere als "as designed".

Der Borland Compiler erlaubt es nicht, eine main() Funktion in einem GUI-Programm zu haben. Dort muss die WinMain() benutzt werden. Aus diesem Grund nennt Qt die main() Funktion in qMain mit Hilfe eines Makros um. Das geschieht aber nur, wenn QT_NEEDS_QMAIN definiert ist.