[C++] Pb au linkage

Pb au linkage [C++] - Programmation

Marsh Posté le 05-08-2002 à 21:05:50    

Voila, j'ai écrit un petit truc en C, qui compile très bien. Les sources sont découpées en plusieurs fichiers .c .
J'ai voulu créer une petite interface graphique pour ca, avec QT. Je copie les fichiers du programme d'origine en C. Une fois arrivé au linkage, il ne trouve pas une fonction qui est définie dans un autre fichier, alors que ca marchait bien avant !
le prototype de la fonction est déclaré dans un .h, inclus dans la source en C++...
Je ne peux pas poster les sources, la, mais je tacherai de le faire demain.
Précision... tout cela est fait sous une slackware 8.1
voili voila, si qqun a une idée... ;)

Reply

Marsh Posté le 05-08-2002 à 21:05:50   

Reply

Marsh Posté le 05-08-2002 à 21:23:47    

Compléments d'infos:
 
Message d'erreur du linker:


[~/old/root/kmac/gui]root@Landi4612>make
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o get_next_line.o get_next_line.c
g++ -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o main.o main.cpp
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o my.o my.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o my_str_to_wordtab.o my_str_to_wordtab.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o openfile.o openfile.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o read_coll.o read_coll.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o search.o search.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o searchopts.o searchopts.c
gcc -c -pipe -Wall -W -O2  -DQT_NO_DEBUG -I/usr/lib/qt-3.0.4/include -I/usr/lib/qt-3.0.4/mkspecs/linux-g++ -o utils.o utils.c
g++  -o gui get_next_line.o main.o my.o my_str_to_wordtab.o openfile.o read_coll.o search.o searchopts.o utils.o   -Wl,-rpath,/usr/lib/qt-3.0.4/lib -L/usr/lib/qt-3.0.4/lib -L/usr/X11R6/lib -lqt -lXext -lX11 -lm
main.o: In function `main':
main.o(.text+0x46): undefined reference to `opencol(char *)'
collect2: ld returned 1 exit status
make: *** [gui] Error 1
[~/old/root/kmac/gui]root@Landi4612>


 
La déclaration dans le .h de ma fonction:

Code :
  1. t_collection opencol(char *filename);


 
Le main:
 

Code :
  1. #include "includes.h"
  2. int    main(int ac, char **av)
  3. {
  4.   int    nbvols = 42;
  5.   int    current = 0;
  6.   int    i;
  7.   QApplication   a(ac, av);
  8.   QListView   liste(0, "liste" );
  9.   t_collection   coll;
  10.   coll = opencol(av[1]);
  11.   if(ac == 1)
  12.     {
  13.       printf("%s", SYNTAX);
  14.       exit (1);
  15.     }
  16.   nbvols = coll.volcount;
  17.   QListViewItem  *items[nbvols];
  18.   liste.addColumn("Volume" );
  19.   liste.setRootIsDecorated(1);
  20.   for(current = 0; current < nbvols; current++)
  21.     {
  22.       items[current] = new QListViewItem(&liste, "toto" );
  23.       for(i = 0; i < 3; i++)
  24. new QListViewItem(items[current], "sub" );
  25.     }
  26.  
  27.   a.setMainWidget(&liste);
  28.   liste.show();
  29.   return a.exec();
  30. }


 
Merci !  :)


Message édité par freds45 le 05-08-2002 à 21:24:30
Reply

Marsh Posté le 05-08-2002 à 22:04:49    

il est ou le corps de opencol?
 
LeGreg

Reply

Marsh Posté le 06-08-2002 à 14:00:36    

legreg a écrit a écrit :

il est ou le corps de opencol?
 
LeGreg




 
dans un autre fichier, read_col.c
 
pourtant, celui ci est bien compilé et utilisé lors du linkage, alors je pige pas :/

Reply

Marsh Posté le 06-08-2002 à 14:16:52    

renomme tes fichiers .c en .cpp
ou alors entoure tes declarations dans ton .h par un  

Code :
  1. #ifdef _cplusplus
  2. extern 'C' {
  3. #endif
  4. t_collection opencol(char *filename);
  5. #ifdef _cplusplus
  6. }
  7. #endif


 
edit:la solution la plus simple a mon gout si tu démarres
un nouveau projet est de renommer tes fichiers .c en .cpp
ou en .cc. Cela te permettra d'utiliser toutes les ressources du C++ dans ton nouveau projet.
 
A+
LeGreg


Message édité par LeGreg le 06-08-2002 à 14:32:47
Reply

Marsh Posté le 06-08-2002 à 20:35:45    

legreg a écrit a écrit :

renomme tes fichiers .c en .cpp
ou alors entoure tes declarations dans ton .h par un  

Code :
  1. #ifdef _cplusplus
  2. extern 'C' {
  3. #endif
  4. t_collection opencol(char *filename);
  5. #ifdef _cplusplus
  6. }
  7. #endif


 
edit:la solution la plus simple a mon gout si tu démarres
un nouveau projet est de renommer tes fichiers .c en .cpp
ou en .cc. Cela te permettra d'utiliser toutes les ressources du C++ dans ton nouveau projet.
 
A+
LeGreg




 
 
ok, je vais tenter de voir ca, merci :)

Reply

Sujets relatifs:

Leave a Replay

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