[Résolu][Débutant][cppunit] linkage impossible d'exemples simples

linkage impossible d'exemples simples [Résolu][Débutant][cppunit] - C++ - Programmation

Marsh Posté le 04-05-2004 à 20:48:10    

Bonjour,
 
j'ai fait pleins d'essais pour arriver à faire fonctionner la bibliothèque cppunit, et je n'y suis arrivé qu'en mettant toutes les classes dans le même fichier (avec le main aussi).
 
Pourriez-vous regarder mon code et me dire ce qui ne va pas s'il vous plaît ? C'est vraiment du code de base avec rien dedans.
 
Vous pouvez télécharger les sources.
 
Fichier MaClasse.H

Code :
  1. #ifndef _MA_CLASSE_H
  2. #define _MA_CLASSE_H
  3. class MaClasse
  4. {
  5. private:
  6.   int _monChamp;
  7. public:
  8.   MaClasse(int);
  9.   int getValeur();
  10. };
  11. #endif


 
Fichier MaClasse.cpp

Code :
  1. #include "MaClasse.H"
  2. MaClasse::MaClasse(int a)
  3.   : _monChamp(a)
  4. {
  5. }
  6. int MaClasse::getValeur()
  7. {
  8.   return 0;
  9. }


 
Fichier MaClasseTest.H

Code :
  1. #ifndef _MA_CLASSE_TEST
  2. #define _MA_CLASSE_TEST
  3. #include <iostream>
  4. #include <cppunit/TestCase.h>
  5. #include <cppunit/TextTestResult.h>
  6. #include <cppunit/TestSuite.h>
  7. #include "MaClasse.H"
  8. class MaClasseTest : public CppUnit::TestCase
  9. {
  10. public:
  11.   MaClasseTest(std::string name);
  12.   void runTest();
  13. };
  14. #endif


 
Fichier MaClasseTest.cpp

Code :
  1. #include "MaClasseTest.H"
  2. MaClasseTest::MaClasseTest(std::string name)
  3.   : CppUnit::TestCase( name )
  4. {
  5. }
  6. void MaClasseTest::runTest()
  7. {
  8.   MaClasse mc1(10);
  9.   MaClasse mc2(10);
  10.   MaClasse mc3(15);
  11.   CPPUNIT_ASSERT( mc1.getValeur() == mc2.getValeur() );
  12.   CPPUNIT_ASSERT( mc1.getValeur() != mc3.getValeur() );
  13. }


 
Fichier test.cpp

Code :
  1. #include <iostream>
  2. #include <cppunit/TextTestResult.h>
  3. #include <cppunit/TestSuite.h>
  4. #include <cppunit/TestCase.h>
  5. #include "MaClasseTest.H"
  6. int main(void)
  7. {
  8.   std::cout << "titi" << std::endl;
  9.   MaClasseTest t1(std::string ("toto" ));
  10.   t1.runTest();
  11.   std::cout << "coucou" << std::endl;
  12. }


 
Résultat de la compilation

Code :
  1. g++ -lcppunit -o test -W -Wall -g test.cpp MaClasse.cpp MaClasseTest.cpp
  2. /tmp/ccdujrUq.o(.gnu.linkonce.t._ZN12MaClasseTestD1Ev+0x22): dans la fonction  MaClasseTest::~MaClasseTest [in-charge]():
  3. /home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/test.cpp:10: undefined reference to `CppUnit::TestCase::~TestCase [not-in-charge]()'
  4. /tmp/ccOOzJew.o(.text+0x27): dans la fonction  MaClasseTest::MaClasseTest[not-in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > ):
  5. /home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::TestCase[not-in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > )'
  6. /tmp/ccOOzJew.o(.text+0x99): dans la fonction  MaClasseTest::MaClasseTest[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > ):
  7. /home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::TestCase[not-in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > )'
  8. /tmp/ccOOzJew.o(.text+0x162): dans la fonction  MaClasseTest::runTest()     :
  9. /home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:14: undefined reference to `CppUnit::SourceLine::SourceLine[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
  10. /tmp/ccOOzJew.o(.text+0x1cb):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:14: undefined reference to `CppUnit::Asserter::failIf(bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, CppUnit::SourceLine)'
  11. /tmp/ccOOzJew.o(.text+0x221):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:14: undefined reference to `CppUnit::SourceLine::~SourceLine [in-charge]()'
  12. /tmp/ccOOzJew.o(.text+0x231):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:14: undefined reference to `CppUnit::SourceLine::~SourceLine [in-charge]()'
  13. /tmp/ccOOzJew.o(.text+0x2bf):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:15: undefined reference to `CppUnit::SourceLine::SourceLine[in-charge](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
  14. /tmp/ccOOzJew.o(.text+0x32e):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:15: undefined reference to `CppUnit::Asserter::failIf(bool, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, CppUnit::SourceLine)'
  15. /tmp/ccOOzJew.o(.text+0x384):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:15: undefined reference to `CppUnit::SourceLine::~SourceLine [in-charge]()'
  16. /tmp/ccOOzJew.o(.text+0x394):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:15: undefined reference to `CppUnit::SourceLine::~SourceLine [in-charge]()'
  17. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTV12MaClasseTest+0x10):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::run(CppUnit::TestResult*)'
  18. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTV12MaClasseTest+0x14):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::countTestCases() const'
  19. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTV12MaClasseTest+0x18):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::getName() const'
  20. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTV12MaClasseTest+0x1c):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::toString() const'
  21. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTV12MaClasseTest+0x20):/home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::run()'
  22. /tmp/ccOOzJew.o(.gnu.linkonce.t._ZN12MaClasseTestD0Ev+0x22): dans la fonction  MaClasseTest::~MaClasseTest [in-charge deleting]():
  23. /home/quetzalcoatl/Documents/projects/POO/cppunit/testExamples/test/MaClasseTest.cpp:5: undefined reference to `CppUnit::TestCase::~TestCase [not-in-charge]()'
  24. /tmp/ccOOzJew.o(.gnu.linkonce.r._ZTI12MaClasseTest+0x8):/usr/include/c++/3.3/iostream:92: undefined reference to `typeinfo for CppUnit::TestCase'
  25. collect2: ld a retourn 1 code d'tat d'excution


 
Compilateur : g++ (GCC) 3.3.3 (Debian 20040429)
Linkeur : GNU ld version 2.14.90.0.7 20031029 Debian GNU/Linux
cppunit : 1.8.0
 
Merci beaucoup


Message édité par TwinSun le 05-05-2004 à 11:27:23
Reply

Marsh Posté le 04-05-2004 à 20:48:10   

Reply

Marsh Posté le 05-05-2004 à 10:15:53    

Mets le -lcppunit à la fin de ta commande

Reply

Marsh Posté le 05-05-2004 à 11:20:47    

djdie a écrit :

Mets le -lcppunit à la fin de ta commande


 
Quand j'ai aperçu cette réponse, je me suis dit que tu te moquais de moi. Ensuite, j'ai lu la réponse et je me suis dit "mouaihh boaf...". J'ai essayé et... ça MARCHE !!!
 
Merci beaucoup Monsieur  :love:

Reply

Marsh Posté le 03-05-2005 à 00:33:40    


Merci pour ce "post"
 
En effet, cela faisait au moins 2 jours que je luttais sur ce problème.
Par contre, est ce que quelqu'un pourrait me dire pourquoi le fait de placer "-lcppunit"  
à la fin (et non au milieu par exemple) change la compilation en tout cas son résultata
 
Merci d'avançe :jap:

Reply

Marsh Posté le 14-10-2007 à 12:14:52    

Salut!  
 
Je me permet de relancer le post parce que je dois avoir sensiblement le même problème. Donc moi tout passe à la compilation et au linkage mais c est à l execution que c est plus difficile :  
 
Le probleme c'est qu'il ne me ressort pas toujours ce qu'il devrait ressortir !  
 
J'ai un code tres simple pour le moment :  
 
une classe main :  
 

Code :
  1. #include <cppunit/ui/text/TestRunner.h>
  2. #include "TermTest.cpp"
  3. using namespace sys;
  4. int main(void)
  5. {
  6.   CppUnit::TextUi::TestRunner runner;
  7.   runner.addTest(TermTest::suite());
  8.   runner.run();
  9.   return 0;
  10. }


 
et une classe de test :  
 

Code :
  1. /*
  2. * Classe testfichier
  3. *  
  4. */
  5. #ifndef TESTFICHIER
  6. #define TESTFICHIER
  7. #include <cppunit/TestFixture.h>
  8. #include <cppunit/extensions/HelperMacros.h>
  9. #include "fichier.h"
  10. namespace sys{
  11. class TermTest : public CppUnit::TestFixture {
  12.    CPPUNIT_TEST_SUITE(TermTest);
  13.    CPPUNIT_TEST(creation);
  14.    CPPUNIT_TEST(testnom);
  15.    CPPUNIT_TEST_SUITE_END();
  16.    fichier *f;
  17. public:
  18.    TermTest() {}
  19.    void creation() {CPPUNIT_ASSERT_EQUAL( 12, 12 );}
  20.    void testnom(){
  21.      CPPUNIT_ASSERT_EQUAL( 12, 13 );
  22.   }
  23. };
  24. }
  25. #endif


 
Je compile avec un makefile qui fait :
 
all : exo3
 
exo3 : main.o TermTest.o
 g++ -o exo3 *.o -lcppunit -ldl
 
main.o : main.cpp
 g++ -c main.cpp
 
TermTest.o : TermTest.cpp
 g++ -c TermTest.cpp
 
clean :
 rm -rf *.
 
Et le résultat varie selon la compilation.. Je peux compiler une fois, il me dit bien qu il y a une erreur sur le test 12==13 puis recompiler, relancer et là il me dit que les deux tests sont ok  :??:  
 
Une idée ??  
 
merci


---------------
http://plainedemazerolles.free.fr
Reply

Marsh Posté le 14-10-2007 à 12:17:08    

Je pense que c'est un probleme du à la compilation car je viens de me rendre compte qu'il ne prennait pas toujours les modifications que je faisais dans mes fichiers..  :heink:


---------------
http://plainedemazerolles.free.fr
Reply

Sujets relatifs:

Leave a Replay

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