Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3115 connectés 

  FORUM HardWare.fr
  Programmation
  C

  How to link my own lib

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

How to link my own lib

n°1095333
zied3
Posté le 24-05-2005 à 17:29:13  profilanswer
 

Salut tout le monde,
J'ai développé une petite librairie et j'ai voulu l'intégrer dans mon projet (sous vc ++), j'ai bien fait attention d'ajouter le nom de la librairie dans l 'onglet link de mes settings et d'ajouter son path, mais j 'ai reçu le fameux messsage "error LNK2001: unresolved external symbol" ce qui veut dire d'après ce que je sais que la déclaration de la fonction  existe mais pas sa définition (qui est dans la lib).
En fait il s agit d'un appel à une fonction défine dans un fichier appartenant à la LIB.
J'ai du oublier un truc  :heink:  
Si vous pouvez m aider , merci d avance

mood
Publicité
Posté le 24-05-2005 à 17:29:13  profilanswer
 

n°1095337
chrisbk
-
Posté le 24-05-2005 à 17:34:58  profilanswer
 

bin la fonction est soit pas dans ta lib, soit tu l'as pas bien inseré, soit tu bricoles avec un melange C/C++


---------------
NP: HTTP Error 764 Stupid coder found
n°1095343
zied3
Posté le 24-05-2005 à 17:37:15  profilanswer
 

Ah oui, ma lib est en C,mais je ne savais pas que ça posait problème:(  
Est ce que je dois la recoder?? il doit bien avoir une solution

n°1095347
chrisbk
-
Posté le 24-05-2005 à 17:38:26  profilanswer
 

dans les .h de tes fonctions de la lib :
 
extern "C" {
 
//declaration de tes fonctions
}


---------------
NP: HTTP Error 764 Stupid coder found
n°1095359
zied3
Posté le 24-05-2005 à 17:50:41  profilanswer
 

Il me retourne une erreur syntaxique!!
Tes sur qu il faut mettre ça la bas, je crois que j ai vu un code dans lequel c'est mis dans le fichier .cpp.
En fait j'ai comme tu m as dit dans ma LIb:
 extern "C" {  
func1(double x);
}
 
et il me retourne "error C2059: syntax error : 'string'".
En fait avant c'était :
"extern func1(double x);"

n°1095410
Taz
bisounours-codeur
Posté le 24-05-2005 à 18:13:22  profilanswer
 

c'est quoi ce titre pourri en anglais ? tu nous prends pour des cake :o

n°1095452
Tarabiscot​e
Posté le 24-05-2005 à 19:03:33  profilanswer
 

Généralement on fait :

#ifdef __cplusplus
extern "C" {
#endif
 
// les prototypes de fonctions ici
 
#ifdef __cplusplus
}
#endif


Afin que ça marche aussi bien en C qu'en C++
 
Bon, après t'es sûr que ta lib est en C (dans le doute recompile avec cette modification) ?
En tout cas, ton programme semble être en C s'il provoque une erreur ici.


Message édité par Tarabiscote le 24-05-2005 à 19:06:35
n°1095781
matafan
Posté le 25-05-2005 à 00:48:32  profilanswer
 

Je ne connais rien a windows donc je dis peut-etre une connerie, mais quand tu cree ta lib il faut exporter les symboles que tu veux rendre accessibles de l'exterieur. Declarer la fonction non "static", ca ne suffit pas. En tout cas ca marche comme ca avec XCOFF.

n°1095835
zied3
Posté le 25-05-2005 à 08:13:23  profilanswer
 

Mais si je fais un "ifdef _cplusplus " ça ne m a servir a rien puisque la déclaration de la fonction est dans une bibliothèque en C. Donc il va pas y entrer.

n°1095840
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2005 à 08:20:04  profilanswer
 

matafan a écrit :

Je ne connais rien a windows donc je dis peut-etre une connerie, mais quand tu cree ta lib il faut exporter les symboles que tu veux rendre accessibles de l'exterieur. Declarer la fonction non "static", ca ne suffit pas. En tout cas ca marche comme ca avec XCOFF.


Tu parles probablement d'une bibliothèque partagée (lien dynamique). Pour les bibliothèques statiques, il suffit que la fonction ne soit pas 'static' (external linkage)
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
mood
Publicité
Posté le 25-05-2005 à 08:20:04  profilanswer
 

n°1095845
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-05-2005 à 08:30:39  profilanswer
 

zied3 a écrit :

Mais si je fais un "ifdef _cplusplus " ça ne m a servir a rien puisque la déclaration de la fonction est dans une bibliothèque en C. Donc il va pas y entrer.


La manip avec le ifdef __cplusplus permet d'utiliser une bibliothèque écrite en C avec un programme écrit en C++. En effet, dans un source compilé en C++, le fichier d'en-tête de la bibliothèque C va être inclus dans le source C++ et être compilé comme du C++. (à ce propos, dans les entêtes supportant C ou C++, il ne faut pas utiliser les mots C++ tels que this, new, delete, class etc.).
 
La macro interne __cplusplus est donc définie, et les déclarations se trouvent donc encadrées de  


extern "C"
{
   /* declarations 'C' */
}


Le but étant d'empécher le compilateur C++ de "décorer" les noms de fonctions (genre myfonc_@@01() au lieu de myfonc() ) de façon à ce que le linker (qui ne connait que 'myfonc') ne soit pas perdu.
 
Si on compile en C, l'effet de extern "C" est nul (non compilé). De toutes façons, extern "C" n'est pas une syntaxe C. Elle génèrerait donc une erreur à la compilation.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1095851
zied3
Posté le 25-05-2005 à 08:37:46  profilanswer
 

En fait je viens de me rendre compte d 'un truc , c'est que lorsque je compile mon projet il me geneère un .exp et . lib, et ce même lorsqu il me génère un .exe !!!
Il me genère des warning avec des "use no defaults lib".
Quelqu un a une idée?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  How to link my own lib

 

Sujets relatifs
[Dev-Cpp] erreur de link avec API GetStockObjectErreur LINK : impossible de compiler
Erreur de Link : LNK1104 : file introuvable c:\Program.objerreur d'execution link.exe
[Débutant] Link avec une DllSpecialisation de template et erreur de link... [presque resolu]
[wxWindows] ça link pasJS link page dans la meme frame
[[MS Visual C++ 6.0] Il ne link plus lors de la compilation [Résolu]PB de Link
Plus de sujets relatifs à : How to link my own lib


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)