lib static

lib static - C++ - Programmation

Marsh Posté le 20-05-2002 à 23:36:02    

Salut! bon c'est tout con,  
mais je ne trouve pas de solution,  
comment fait-t-on lorsque un fichier (sous gcc et linux)  
compile avec une lib static, lorsque ce fichier est en c....  
et que s'il est en c++, (change l'extension en cpp),  
bah ca marche plus, j'ai des undefined ref a toute les fcts  
que j'utilise appartenant à la lib en clair,  
 
en c ca marche, en c++, ca marche plus,  
sachant que je veux du c++... peut-on remedier a ca?

Reply

Marsh Posté le 20-05-2002 à 23:36:02   

Reply

Marsh Posté le 21-05-2002 à 08:46:35    

Peut être que ton problème viens des headers (.h).
Quand des fonctions sont compilées avec un compilo C et que l'on veut les utiliser avec un compilo C++, alors il faut changer les headers pour indiquer que ce sont des fonctions C et non pas C++:
 
au lieu de  
---------------------
#ifndef HEADER_H
#define HEADER_H
 
int fonction1( int a );
int fonction2( char * pchar );
 
#endif
---------------------
 
il faut écrire:
 
---------------------
#ifndef HEADER_H
#define HEADER_H
 
if defined _cplusplus
extern "C"
{
#endif
 
int fonction1( int a );
int fonction2( char * pchar );
 
if defined _cplusplus
}
#endif
 
#endif
---------------------
 
 
En fait, le compilo C++ fait une "décoration" du nom de la fonction, contrairement au compilateur C. Cela vient du fait qu'en C++, tu peut tout à fait définir 2 fonctions qui ont le même nom:
int fonction( int a);
int fonction( int a, int b);
 
le compilateur saura quelle fonction choisir en fonction des arguments passés lors de l'appel. Ceci est interdit en C. Pur autoriser cela, le compilateur "décore" le nom des fonctions.
 
 
 
Autre solution: compiler ta lib static avec un compilo C++ et non pas C.
 
 
J'espère que cela t'aidera.
a+

Reply

Marsh Posté le 21-05-2002 à 09:18:39    

Ok, merci, mais je compile deja avec "c++" le compilo c++ de
gcc, en fait c'est juste qd je transforme le .c en .cpp, juste
le nom..., faut cependant que je verifie les headers...

Reply

Sujets relatifs:

Leave a Replay

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