Erreur de compilation avec un makefile

Erreur de compilation avec un makefile - C++ - Programmation

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)

Reply

Marsh Posté le 31-01-2003 à 13:46:32   

Reply

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 :  


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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

Reply

Marsh Posté le 31-01-2003 à 15:17:41    

j'ai explique.
En gros :
   si main => c0x32.obj
   si WinMain => c0w32.obj


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

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 :)

Reply

Marsh Posté le 31-01-2003 à 16:09:23    

OK
Merci, c'était tout con

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed