Votre question

Porter un projet C++ deja fait vers dev-c++

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
21 Septembre 2005 23:42:10

Je souhaite continuer le développement d'un programme C++avec Dev-C++, alors que je l'ai jusqu'a présent programmé avec MinGW.

Apres l'installation de DevC++, j'ai crée un projet vide où j'ai mis toutes mes classes en respectant les répertoires. Apparament, DevC++ n'a pas pris les MakeFile que j'utilisais pour compiler sous MinGW, et naturellement, il refuse de compiler...
Quelles sont les procédures par lesquelles je peux passer pour reconstruire mon programme ?

Autres pages sur : porter projet fait vers dev

a b L Programmation
22 Septembre 2005 00:26:51

pourtant c'est le même compilo, as-tu bien paramétré les paths (includes & lib) dans les paramètres de projet ?

edit: crée un nouveau projet et ajoute tous tes fichiers.
22 Septembre 2005 10:08:17

Non, pas encore, je vais essayer des les faire mais je ne le sais pas bien.
As tu des conseils où un didactiel pour bien les configurer ? J'ai d'un coté les feuilles que j'ai crée et de l'autres des libraries que j'utilise, c'est avec des path différents ?

C'est quoi les includes ?
Contenus similaires
Pas de réponse à votre question ? Demandez !
a b L Programmation
22 Septembre 2005 13:17:33

Pour les tutoriaux, je te laisse chercher :-D
includes c'est de l'anglais (désolé j'ai trop l'habitude), ce sont les inclusions de fichiers .h (les lignes #include <toto.h>)
Il faut que le compilateur sache où trouver les fichiers .h (ceux des lib)
il y a un autre path pour la librairie elle-même.

3 chemins différents:
- celui de tes fichiers sources (mais ça tu ne t'en préoccupe pas, c'est le répertoire courant de la compliation)
- celui des fichiers d'inclusions .h (ceux des librairies)
- celui des librairairies à lier

(pour l'anglais, c'est pareil, je met librairie mais c'est bibliothèque ;-) )
22 Septembre 2005 22:54:33

Merci pour les conseils, j'ai mis les paths, ensuite j'ai installé les packs pour wxwindows qu'utilise mon programme.
Mais à ce stade, j'ai un probleme de compilation qui me laisse perplexe : une fois qu'il a les .o, il me dit que la ligne de commande du compilateur (pour l'assemblage des .a) est trop longue ! error 255.
Peut etre le probleme est il connu, c 'est un parametre à modifier ? Où est ce que je peux découper mon programme en sous parties que j'assemble ensuite ?
Merci a ceux qui ont le savoir !
a b L Programmation
22 Septembre 2005 22:58:20

Ecrit ici toute la ligne même si elle est longue, pour être sûr de ce que c'est ;-)

un .a est une librairie, donc c'est un problème de lien de code compilé (signature de fonctions non trouvée [dans ce cas, il faut vérifier le path du fichier .a], dupliquée ?) il peut y avoir plein d'autres raisons ;-)
22 Septembre 2005 23:11:46

Je t'enverrai demain le texte exact, mais pour le .a, il s'agissait d'une interprétation toute personnelle.
Le compilateur dit explicitement "line/command too long" apres avoir écrit une commande interrompue tres longue car contenant tous les noms d'objects compilés (.o) que contient mon programme.
23 Septembre 2005 10:54:21

Je recois à la compilation le message d'erreur suivant :
C:\Documents and Settings\C058756\Bureau\devcastha\Makefile.win [Build Error] [castha.exe] Error 255

et voila l'explication du Compile Log apres l'échec de la compilation :

Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\C058756\Bureau\devcastha\Makefile.win"
Executing make...
make.exe -f "C:\Documents and Settings\C058756\Bureau\devcastha\Makefile.win" all
windres.exe -i castha_private.rc --input-format=rc -o castha_private.res -O coff --include-dir C:/Dev-Cpp/include

g++.exe D:/program/Contacts.o D:/program/Facies.o
...
Ici une liste de tous mes .o, il y en a beaucoup
...
D:/program/GUI/DialogParametresAvances.o castha_private.res -o "castha.exe" -L"C:/Dev-Cpp/lib" -L"D:/program/lib" -L"D:/program/vtk/output/lib" -L"D:/program/hdf/src/.libs" -L"D:/program/spooles" -mwindows -Wl,--subsystem,windows -mwindows -lwxmsw -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -ladvapi32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid

La ligne entr‚e est trop longue.

make.exe: *** [castha.exe] Error 255

Execution terminated
a b L Programmation
23 Septembre 2005 13:14:17

Normalemetn, ça compile tout au même endroit et ça ne met pas le path complet pour chaque fichier .o
peux-tu mettre le contenu de ton Makefile.win et de ton fichier .dev (les 2 sont en fait des fichiers textes) ?
23 Septembre 2005 15:10:01

Les voici les voila :

le makefile

# Project: Project1
# Makefile created by Dev-C++ 4.9.9.2

CPP = g++.exe
CC = gcc.exe
WINDRES = windres.exe
RES = castha_private.res
OBJ = D:/program/castha/calculs/TableDesContacts.o D:/program/castha/calculs/OptimisationFacies.o D:/program/castha/calculs/ModelisationPuitDeCh... ...D:/program/castha/calculs/CalculMecanique-GestionDesContacts.o D:/program/castha/calculs/CalculMecanique-DilatationThermique.o $(RES)
LINKOBJ = D:/program/castha/calculs/TableDesContacts.o D:/program/castha/calculs/OptimisationFacies.o D:/program/castha/calculs/ModelisationPuitDeChaleur.o D:/program/castha/calculs/Master.o ................... D:/program/castha/calculs/CalculMecanique-GestionDesContacts.o D:/program/castha/calculs/CalculMecanique-DilatationThermique.o $(RES)
LIBS = -L"C:/Dev-Cpp/lib" -L"D:/program/castha/lib" -L"D:/program/vtk/output/lib" -L"D:/program/hdf/src/.libs" -L"D:/program/spooles" -mwindows -Wl,--subsystem,windows -mwindows -lwxmsw -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -ladvapi32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid
INCS = -I"C:/Dev-Cpp/include" -I"D:/program/vtk/output/include" -I"D:/program/hdf/src" -I"D:/program/spooles" -I"D:/program/castha/types" -I"D:/program/castha/calculs" -I"D:/program/castha/vtk"
CXXINCS = -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"C:/Dev-Cpp/include/c++/3.4.2/backward" -I"C:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"C:/Dev-Cpp/include/c++/3.4.2" -I"C:/Dev-Cpp/include" -I"D:/program/vtk/output/include" -I"D:/program/hdf/src" -I"D:/program/spooles" -I"D:/program/castha/types" -I"D:/program/castha/calculs" -I"D:/program/castha/vtk"
BIN = castha.exe
CXXFLAGS = $(CXXINCS) -DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -DHAVE_W32API_H -D__WXMSW__ -D__WINDOWS__ -Wall -fno-pcc-struct-return -O2 -Os -fno-rtti -fno-exceptions
CFLAGS = $(INCS)
RM = rm -f

.PHONY: all all-before all-after clean clean-custom

all: all-before castha.exe all-after


clean: clean-custom
${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
$(CPP) $(LINKOBJ) -o "castha.exe" $(LIBS)

D:/program/castha/calculs/TableDesContacts.o: D:/program/castha/calculs/TableDesContacts.cpp
$(CPP) -c D:/program/castha/calculs/TableDesContacts.cpp -o D:/program/castha/calculs/TableDesContacts.o $(CXXFLAGS)

D:/program/castha/calculs/OptimisationFacies.o: D:/program/castha/calculs/OptimisationFacies.cpp
$(CPP) -c D:/program/castha/calculs/OptimisationFacies.cpp -o D:/program/castha/calculs/OptimisationFacies.o $(CXXFLAGS)

D:/program/castha/calculs/ModelisationPuitDeChaleur.o: D:/program/castha/calculs/ModelisationPuitDeChaleur.cpp
$(CPP) -c D:/program/castha/calculs/ModelisationPuitDeChaleur.cpp -o D:/program/castha/calculs/ModelisationPuitDeChaleur.o $(CXXFLAGS)

D:/program/castha/calculs/Master.o: D:/program/castha/calculs/Master.cpp
$(CPP) -c D:/program/castha/calculs/Master.cpp -o D:/program/castha/calculs/Master.o $(CXXFLAGS)

D:/program/castha/calculs/MaillageDisque.o: D:/program/castha/calculs/MaillageDisque.cpp
$(CPP) -c D:/program/castha/calculs/MaillageDisque.cpp -o D:/program/castha/calculs/MaillageDisque.o $(CXXFLAGS)

le .dev

[Project]
FileName=castha.dev
Name=Project1
UnitCount=122
Type=0
Ver=1
ObjFiles=
Includes=D:\program\vtk\output\include;D:\program\hdf\src;D:\program\spooles;D:\program\castha\types;D:\program\castha\calculs;D:\program\castha\vtk
Libs=D:\program\castha\lib;D:\program\vtk\output\lib;D:\program\hdf\src\.libs;D:\program\spooles
PrivateResource=castha_private.rc
ResourceIncludes=C:\Dev-Cpp\include
MakeIncludes=
Compiler=
CppCompiler=-DWINVER=0x0400 -D__WIN95__ -D__GNUWIN32__ -D__WIN32__ -DHAVE_W32API_H -D__WXMSW__ -D__WINDOWS__ -Wall -fno-pcc-struct-return -O2 -Os -fno-rtti -fno-exceptions_@@_
Linker=-Wl,--subsystem,windows -mwindows -lwxmsw -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -ladvapi32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid _@@_
IsCpp=1
Icon=castha.ico
ExeOutput=
ObjectOutput=
OverrideOutput=0
OverrideOutputName=castha.exe
HostApplication=
Folders=calculs,GUI,types,vtk
CommandLine=
UseCustomMakefile=0
CustomMakefile=Makefile.win
IncludeVersionInfo=0
SupportXPThemes=0
CompilerSet=0
CompilerSettings=0000000000000000000000

[VersionInfo]
Major=0
Minor=1
Release=1
Build=1
LanguageID=1033
CharsetID=1252
CompanyName=
FileVersion=
FileDescription=Developed using the Dev-C++ IDE
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
AutoIncBuildNr=0

[Unit2]
FileName=D:\program\castha\calculs\TypeDeDisque.h
CompileCpp=1
Folder=calculs
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

a b L Programmation
23 Septembre 2005 18:47:13

Ok,

Vas dans les paramètres de projets, onglet "construction", met dans sortie des fichiers objet D:/program/castha

En fait, ça serait pour mettrte dans le .dev le répertoire sur ObjFiles et enlever les "D:/program/castha" avant tous les objets dans la variable LINKOBJ pour gagner de la place.
Si modifier les paramètres de projets ne modifient pas tout, modifie le à la main.
Sinon dans l'onglet "fichiers" tu surcharge la construction, et tu remplaces le $(OBJ) par D:/program/castha/calculs/*.obj D:/program/castha/GUI/*.obj ...
(Bon je sais pas si ça ça marche).
26 Septembre 2005 12:00:30

Pour finir, j'ai refait un makefile qui crée des .a contenant plusieurs .o
Grace à ca, la ligne de commande passe et le linker se lance.
Je fais face maintenant à une autre difficulté, dont la solution sur un forum pour Visual-C++ n'a pas l'air de marcher avec Dev-C++ :
http://forums.devshed.com/showthread.php?

J'ai l'erreur suivante :
C:/Dev-Cpp/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'
et je ne peux modifier mon type de programme (qui était bien en Win32 GUI) que vers Win32 console, ce qui ne résout pas le probleme.

Merci pour l'aide que tu m'a apportée jusqu'à présent
a b L Programmation
26 Septembre 2005 13:23:10

Par défaut avec gcc, ça compile sur point d'entrée main()
Si tu compile avec l'option -mwindows, alors le point d'entrée est winmain (pour une application graphique windows).

donc dans ton Makefile, ajoute -mwindows à la ligne de compilation.
Sous Visual C++ c'est effectivement différent, une simple variable est utilisée.
26 Septembre 2005 17:08:33

Le truc est que je n'ai pas de main(). Je travaille avec Wxwindows. En modifiant les options de compilation, j'obtiens encore les memes erreurs :

g++.exe D:/program/castha/lib/calculs.a D:/program/castha/lib/types.a D:/program/castha/lib/vtk.a D:/program/castha/lib/GUI.a castha_private.res -lm -Wl,--subsystem,windows -mwindows -lwxmsw -lstdc++ -lgcc -lodbc32 -lwsock32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lctl3d32 -ladvapi32 -lopengl32 -lglu32 -lole32 -loleaut32 -luuid -o "castha.exe" -L"C:/Dev-Cpp/lib" -L"D:/program/castha/lib" -L"D:/program/vtk/output/lib" -L"D:/program/hdf/src/.libs" -L"D:/program/spooles"

C:/Dev-Cpp/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'

Ce qui est surprenant est que j'ai réussi à compiler d'autres exemples de programmes Wxwindows avec ma configuration de DevCpp
a b L Programmation
26 Septembre 2005 19:06:35

Et tu as la fonction winmain quelque part ?
Si tu n'en as pas et que tu utilise directement ta classe de base, je pense qu'il doit te manquer une librairie wxWidget à lier.

EDIT: Je vois aussi qu'il n'y a pas de -L"D:\install_de_wxWidget\lib", je pense que tu aurais eu d'autres problème de link, mais on sait jamais :-D

REEDIT: tu n'as pas d'autres lignes avant le [C:/Dev-Cpp/lib/libmingw32.a(main.o)(.text+0x106):main.c: undefined reference to `WinMain@16'] parlant de fichiers .o ?
27 Septembre 2005 14:50:06

J'ai un peu avancé depuis la derniere fois. En rendant le projet plus petit, je vois que mon probleme vient des .a que je crée car le linker ne voit pas les .o qui sont dedans : entre

LINKOBJ = D:/program/castha/lib/GUI2.a $(RES)

et

LINKOBJ = D:/program/castha/GUI/FrameMain.o D:/program/castha/GUI/CasthaApp.o $(RES)

où GUI2.a a été crée a partir de FrameMain.o et CasthaApp.o, le premier plante et le deuxième passe. Ce constat est confirmé en faisant des mélanges de .a et .o

Ce que je ne sais pas, c'est comment faire rentrer les .a pour le linker. Dans mon ancien environnement avec MinGW, ca passait sans véritable problème mais ici, je ne comprends pas. Quels sont les liens que requiere dev cpp pour voir des librairies où pour traiter les .a ?
a b L Programmation
27 Septembre 2005 19:20:04

La variabl est peut-être trop longue.
- Essaie en utilisant LINKOBJ1, LIBOBJ2, etc.
- Sinon essaie d'enlever le D:/program/castha/GUI et ne mettre que les FrameMain.o et en mettant les paths -LD:/program/castha/GUI (et les autres), ça raccourcira la ligne.
28 Septembre 2005 10:12:39

où est ce que je les mets les paths stp ?
Et j'ai l'impression que quand je lui donnne plusieurs librairies, il zappe certaines fonctions dedans et le linker me dit alors "undefined reference to ...". Je dois mal écrire la ligne des "LIBS = ", sais tu quels précautions je dois prendre pour être sur qu'il récupère bien toutes les fonctions des différentes librairies ?
28 Septembre 2005 10:40:21

OK je n'ai plus le probleme : j'ai renommé les librairies récalcitrantes en ajouttant lib au début du nom et avec -lNomDeLaLibrairie dans le LIBS et en rajouttant des -s derriere (est ce nécessaire ?). Maintenant ca marche du tonnerre, merci.

Par contre, est ce que je vais pouvoir débugger avec mon Makefile ou faut il qu'il le génère lui meme ?
a b L Programmation
28 Septembre 2005 13:05:10

déjà si tu mets -s qui supprime des infos utilies au debuggage, je doute que ça marche.

Le debugger n'a pas besoin du makefile, il prend juste l'exe. Par conter il faut que dans cet exe, il y ait les infos de debug (format dwarf2).
Et pour ça il faut ajouter l'option -g ou directement -ggdb (pour les infos utilisables par gdb). A mettre à la compilation du .c en .o je crois (pas sûr non plus :-D)

Tiens un lien qui peut t'interesser:
http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
28 Septembre 2005 18:43:16

Ca marche du tonnerre, maintenant je peux debugger

Merci pour tous les conseils !

Y a t il de dernieres précautions à prendre si j'agrandit le projet ou pour d'autres utilisation du debugger ?

Bye
a b L Programmation
28 Septembre 2005 19:20:47

Pour le debugger si ec que tu as fait marche, il n'y a pas de problème, tu compile tes nouveaux fichiers de la même façon.
Après si t'ajoutes beaucoup de fichiers et que ça ne compile pas parce qu'il y a trop de fichiers .o, je te suggère de créer une ou plusieurs librairies: plusieurs compilations avec moins de fichiers, et pour lier tu mets une librairie au lien de n fichiers .o
Bonne continuation ;-)
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS