lib static - C++ - Programmation
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+
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...
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?