pressé : pb de compil : undefined reference to ...

pressé : pb de compil : undefined reference to ... - C++ - Programmation

Marsh Posté le 31-08-2005 à 09:04:26    

Bonjour,
 
bon, c'est plutot pressé comme aide, je n'arrive pas a compiler mon programme : il est composé de
main.cpp
FmVolume.cpp/hpp
gslRealign.cpp/hpp
gslReslice.cpp/hpp
opMatrix.cpp/hpp
 
et une biblio statique ecrite en C dont les fonctions dispo sont dans : spm_for_gsl.h
main:

Code :
  1. #include "FmVolume.hpp"
  2. #include "gslRealign.hpp"
  3. #include "gslReslice.hpp"
  4. #include "spmForGslLib/spm_for_gsl.h"


FmVolume:

Code :
  1. #include "gslHEADER.h"
  2. #include "opMatrix.hpp"
  3. #include "spmForGslLib/spm_for_gsl.h"


gslRealignet gslReslice :

Code :
  1. #include "FmVolume.hpp"
  2. #include "opMatrix.hpp"
  3. #include "spmForGslLib/spm_for_gsl.h"


 
ma ligne de compilation :
 g++ -Wall -lm spmForGslLib/spm_for_gsl.a opMatrix.cpp FmVolume.cpp gslRealign.cpp gslReslice.cpp main.cpp -o main
 
et donc j'ai comme erreur:

Code :
  1. In function `smoothVol(FmVolume, optionsRealign, double*)':: undefined reference to `gsl_spm_bsplinc'


et plein d'autres comme ça avec toutes les fonctions de ma biblio C...  :(  
je ne comprend pas ce qui va de travers!  
 
Je suis prete à tout essayer!

Reply

Marsh Posté le 31-08-2005 à 09:04:26   

Reply

Marsh Posté le 31-08-2005 à 09:17:38    

il me semble qu'il faut que tes fonctions C soient déclarées sous la forme :

Code :
  1. extern "C" {
  2.   prototype fonction 1
  3.   ...
  4. }


Message édité par manatane le 31-08-2005 à 09:18:12
Reply

Marsh Posté le 31-08-2005 à 09:21:03    

manatane > au vu de l'erreur de link (symbole sans décoration) je doute que ca soit ca le pb

Reply

Marsh Posté le 31-08-2005 à 09:21:59    

d'ailleurs je vois pas la biblio C sur sa ligne de commande ?

Reply

Marsh Posté le 31-08-2005 à 09:22:58    

mon spmForGslLib/spm_for_gsl.h est construit comme ca:

Code :
  1. #ifndef _SPM_FOR_GSL_H_
  2. #define _SPM_FOR_GSL_H_
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include "spm_vol_access.h"
  7. typedef struct vol_to_be_mapped
  8.   {
  9. /* ... */
  10.   } VOLMAP;
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. /*Protos*/
  16. #ifdef __cplusplus
  17. }
  18. #endif
  19. #endif   /* _SPM_FOR_GSL_H_  */

Reply

Marsh Posté le 31-08-2005 à 09:24:28    

spmForGslLib/spm_for_gsl.a   <-- ma biblio
(je me suis inspirée du site Leahttp://lea-linux.org/dev/libc.html ...)
j'ai peut etre pas mis dans le bon ordre...


Message édité par nifnef le 31-08-2005 à 09:28:05
Reply

Marsh Posté le 31-08-2005 à 09:27:47    

ah désolé, j'avais pas vu. Ca marche ca ? d'hab je passe par -l, genre
 
-lspmForGslLib/spm_for_gsl.a
 
(pis je me demande si avec ces outils evolués fo pas que nom de la lib commence par "lib" )

Reply

Marsh Posté le 31-08-2005 à 09:45:23    

chrisbk a écrit :

(pis je me demande si avec ces outils evolués fo pas que nom de la lib commence par "lib" )


 
Me semble que si, et sans l'extension.
 
Genre pour la libm.a/libm.so, on utilise l'option "-lm"
De même si la bibliothèque est présente dans un répertoire qui ne figure pas dans la variable $LD_LIBRARY_PATH, il faut inclure le répertoire en question avec l'option -L
 
L'idéal serait de compiler avec :

g++ -Wall -L./spmForGslLib -lm -lspm_for_gsl opMatrix.cpp FmVolume.cpp gslRealign.cpp gslReslice.cpp main.cpp -o main


 
Avec le fichier "libspm_for_gsl.a" dans le répertoire "./spmForGslLib" (remplacer "./" avec le répertoire qui_va_bien)
 
En espérant que ce ne soit pas la seule erreur...


Message édité par Elmoricq le 31-08-2005 à 09:53:42
Reply

Marsh Posté le 31-08-2005 à 09:47:08    

Elmoricq a écrit :


 
En espérant que ce ne soit pas la seule erreur...

 <--- moi j'espere que si!

Reply

Marsh Posté le 31-08-2005 à 09:48:05    

Euh, oui. C'est le matin, pas pris mon café tout ça... [:elmoricq]

Reply

Marsh Posté le 31-08-2005 à 09:48:05   

Reply

Marsh Posté le 31-08-2005 à 09:54:16    

mouarf ... pas d'evolution, par contre tout a l'heure j'ai essayé en changeant l'ordre et j'ai eu pleins d'erreur dans ma biblio...  
bon, je pense que ca vient de la biblio, mal compilée elle aussi...
je vois ça...
bon ben voilà, c'est dans la biblio que ca merdouille.
J'espere ne pas vous avoir fait perdre votre temps,
Merci à tous!
 
 
pouah! il faut que je retroune dans le code tout crado de l'autre fois (avec mes tonnes de define )
 :sweat:     :cry:


Message édité par nifnef le 31-08-2005 à 09:57:44
Reply

Marsh Posté le 31-08-2005 à 10:51:29    

Savez-vous comment faire remonter les printf de la biblio en C,  comment binder avec cout/cerr?

Reply

Marsh Posté le 31-08-2005 à 10:55:02    

huh ? tu peux developper ?

Reply

Marsh Posté le 31-08-2005 à 11:19:17    

mes messages d'erreur avec mes printf sont affichés normalement par mon code c++? ou bien est-ce qu'il faut les "transformer" en cout?

Reply

Marsh Posté le 31-08-2005 à 12:16:36    

il me semble que c'est déconseillé de mélanger les I/O C et C++


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 31-08-2005 à 15:01:34    

pour un peu que chacun bufferise dans son coin ...

Reply

Marsh Posté le 31-08-2005 à 17:03:50    

En meme temps, si depuis du C++ t'utilises une lib qui fait des printfs, t'as pas trop le choix.

Reply

Marsh Posté le 31-08-2005 à 17:23:42    

Y'a sync_with_stdio. Normalement c'est le cas par défaut.


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

Sujets relatifs:

Leave a Replay

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