Erreur de compilation avec un makefile - C++ - Programmation
Marsh Posté le 31-01-2003 à 14:59:33
Ben c'est assez clair : il trouve pas main ...
faut lui dire (comment, arf ... je sais pas trop) que ton prog est un WinMain.
J'avais un peu bataillé, et j'avais trouvé que la fonction qui appelle WinMain (courament appelee startup code / crt0) se trouvait dans un obj particulier.
Cette fonction semble avoir un attribut genre "entry point fonction" que le linker détecte et utilise comme point d'entree (le linker de BC++ n'a pas d'option /ENTRY comme VC++)
DOnc faut lui fournir en parametre un fichier obj contenant cette fameuse startup routine qui appelle WinMain.
J'avais essayé de faire la mienne (pour réduire la taille des exe) mais je m'y etais cassé les dents. Car Borland ne fournit pas le source de ses crt0.
Essai de remplacer c0w32.obj par une autre (regarde ou elle se trouve (dans \LIB je crois), cherche parmis ses soeurs (recherche celle qui contient le symbol WinMain)).
C'est bizarre quand meme, car le w32 semble spécifier Windows 32 ...
arf attend, tente de changer la ligne
ALLOBJ = c0x32.obj
en
ALLOBJ = c0w32.obj
ben oui kel kon, j'ai mal lu ton post :
"Compilation a la ligne de commande : "
"Cela fonctionne."
bon ben ca devrait etre cette ligne alors
"
Compilation a la ligne de commande :
Marsh Posté le 31-01-2003 à 15:14:50
Faut qu'on m'explique,
Si je remplace c0x32.obj par c0w32.obj dans le makefile, cela fonctionne
Merci
Marsh Posté le 31-01-2003 à 15:17:41
j'ai explique.
En gros :
si main => c0x32.obj
si WinMain => c0w32.obj
Marsh Posté le 31-01-2003 à 15:27:37
En effet, si tu fait une appli console, il faut c0x32.obj, si tu fais une appli fenetrée c'est c0w32.obj
Normallement, l'IDE est censé faire le travail pour toi
Marsh Posté le 31-01-2003 à 13:46:32
Bonjour,
J'utilise borland c++ 5.5 Builder.
J'ai réalisé une appli de test (fenetre popup avec un text) pour tester l'installation du compilateur.
Compilation a la ligne de commande :
bcc32 -tW -c -I"c:\apps\Bcc55\include" -L"c:\apps\Bcc55\lib" hellowin
ilink32 -aa -L"c:\apps\Bcc55\lib" c0w32 hellowin.obj,hellowin,,import32 cw32,,
Cela fonctionne.
Si je réalise un makefile, j'ai une erreur:
Unresolved external '_main' referenced from C:\APPS\BCC55\LIB\C0X32.OBJ
Je ne comprends pas d'ou vient l'erreur.
MAKEFILE:
BCB = c:\apps\bcc55
PROG = hellowin
INCLUDEPATH = "$(BCB)\include"
LIBPATH = "$(BCB)\lib"
# -------------------------------------------------------------
CFLAGS = -tW -c
LFLAGS = -aa
# -------------------------------------------------------------
ALLOBJ = c0x32.obj
ALLLIB = import32.lib cw32.lib
# -------------------------------------------------------------
BCC32 = $(BCB)\bin\bcc32
LINKER = $(BCB)\bin\ilink32
#--------------------------------------------------------------ALL:
$(LINKER) $(LFLAGS) -L$(LIBPATH) $(PROG).obj $(ALLOBJ),$(PROG),,$(ALLLIB),,
# -------------------------------------------------------------
$(PROG).obj:
$(BCC32) $(CFLAGS) -I$(INCLUDEPATH) -L$(LIBPATH) $(PROG)