nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 2007
-
30 déc. 2006 à 00:29
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 2012
-
18 janv. 2007 à 08:02
Bonjour !
Je vient de commencer la programmation en C++ sous Linux, et je suis confronté à un problème. J'aimerais exporter une classe C++ dans une librairie statique, mais je n'y arrive pas...
Je vous donne le code, et les lignes de commandes pour la compilation :
1 // CFile.h
2 // Fichier header principal de la librairie CFile
3 //
4 // Fichier qui définit la classe CFile, et qui inclut les headers nécessaires à son bon fonctionnement
5
6 #if !defined(__CFILE_LIB_H)
7 #define __CFILE_LIB_H
8
9 #include
10
11 class CFile
12 {
13 public: CFile();
14 public: ~CFile();
15 };
16
17 #endif //!defined(__CFILE_LIB_H)
1 // CFile.cpp
2 // Le fichier principal de la librairie CFile.
3 //
4 // C'est dans ce fichier que va être implémentée la classe CFile de la librairie.
5
6 #include "CFile.h"
7
8 CFile::CFile()
9 {
10 std::cout << "OK !" << std::endl;
11 }
12
13 CFile::~CFile()
14 {
15 std::cout << "Deja ma mort :'(" << std::endl;
16 }
1 # Makefile
2 # Fichier de compilation de la librairie CFile
3 #
4 # Ecrit par Pierre BOURDON, le 29/12/06
5
6 # Compilateur C++ du système
7 HOSTCXX = g++
8 CXXDEPENDANT = -c
9 CXXOUTPUT = -o
10
11 # Utilitaire de librairie du système
12 HOSTAR = ar
13 HOSTRANLIB = ranlib
14 ARCREATE = rcs
15
16 # Fichiers à compiler pour obtenir le projet complet
17 # TODO: Rajouter içi les fichiers au fur et à mesure
18 TOCOMPILE = CFile.cpp
19
20 # Option à passer pour compiler en exportant les fonctions
21 EXPORT = -DEXPORT_FOR_CFILE
22
23 # Fichiers à linker obtenus par compilation des fichiers .cpp
24 # Attention: Ne pas modifier, ils sont obtenus automatiquement avec la liste ci-dessus
25 OBJECTS = $(TOCOMPILE:.cpp=.o)
26
27 # Le nom du fichier de sortie : par défaut libcfile.a
28 OUTPUT = libcfile.a
29
30 # Règles de compilation
31
32 # Le fichier de sortie : à besoin de tous les fichiers objets du projet
33 $(OUTPUT) : $(OBJECTS)
34 $(HOSTAR) $(ARCREATE) $(OUTPUT) $(OBJECTS)
35 $(HOSTRANLIB) $(OUTPUT)
36
37 # clean : la règle permettant de nettoyer le répertoire
38 clean :
39 rm -f $(OBJECTS)
40
41 # rmproper : nettoie tout, même le binaire produit !
42 rmproper : clean
43 rm -f $(OUTPUT)
44
45 # all : construit tout (dans notre cas, seulement $(OUTPUT)
46 all : $(OUTPUT)
47
48 # Les règles de compilation des différents fichiers du projet
49 CFile.o : CFile.cpp CFile.h
50 $(HOSTCXX) $(CXXDEPENDANT) $(EXPORT) $(CXXOUTPUT) CFile.o CFile.cpp
Quand je compile mon projet de test, je met bien ma librairie statique (-L/chemin/vers/librairie -lcfile), et il me met des "undefined reference to CFile::CFile()" et "CFile::~CFile()"...
J'espère que quelqu'un pourra m'aider...
<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 20121 18 janv. 2007 à 08:02
J'ai pas essayé, mais essaie de remplacer
#if !defined(__CFILE_LIB_H)
par:
#ifndef __CFILE_LIB_H
Petit commentaire: tu n'es pas obligé de spécifier public à chaque fois. P. ex.:
class ClassA{
private:
int _donnee1;
char _donnee2;
float _donnee3;
public:
ClassA();
~ClassA();
};
_donne1, _donne2 et _donne3 seront privés, le coinstructeur et le destructeur seront publics. Si tu ne précise rien, une méthode ou une donnée membre sont par défaut private.