Je suis dans le paradis des liens maintenant. J'ai une bibliothèque C qui compile uniquement en Visual C++ (cela fonctionne probablement gcc) si:Liaison à une bibliothèque C compilée en C++
- Je compile comme C++ Code
- Définir
__cplusplus
qui se traduit par toutes les déclarations étant enfermé dansextern "C" { }
Alors, en faisant cela j'ai une bibliothèque statique appelée, par exemple, bsbs.lib
maintenant, j'ai un projet C++ appelé Tester
qui voudrait appeler la fonction barbar
dans déclaré dans bsbs.h
. Tout va bien, jusqu'à ce que je tente de créer un lien vers bsbs.lib
où je reçois le tout aussi familier:
Tester.obj : error LNK2001: unresolved external symbol _foofoo
Et il semble toujours être foofoo
qui ne peut être résolu quelle que soit la fonction que j'appelle à Tester
(barbar
ou rien d'autre).
Mise à jour: J'ai développé le point 2 comme demandé. Merci beaucoup pour l'aide les gars!
#ifndef _BSBS_H
#define _BSBS_H
/* Prevent C++ programs from name mangling these definitions. */
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
#include <setjmp.h>
.......
.......
#ifdef __cplusplus
}
#endif
#endif /* _BSBS_H */
Ceci est le fichier d'en-tête "principal", pour ainsi dire. Toutes les fonctions importantes sont ici. Mais il existe d'autres fichiers d'en-tête appelés par le fichier bsbs.c
qui sont et non inclus dans extern "C" {}
.
Résolu: OK, cela est assez bizarre, mais je retire le bit extern C
du fichier d'en-tête dans bsbs
, compilé comme un projet C++ (même si tous les fichiers sont .c
et retirés de la __cplusplus
définir) et ça a marché! J'ai eu l'idée après avoir regardé la liste des symboles. Tout a été mutilé sauf ceux inclus dans extern C
(doh) et il demandait un symbole démêlé donc j'ai pensé que quelque chose n'allait pas.
Et vous ne référencez pas "_foofoo" n'importe où dans le code du testeur? –
Que voulez-vous dire au point 2 - Je pense que nous devons voir du code car cela pourrait être faux – Mark
Est-ce que 'foofoo' dans une troisième bibliothèque vous manque, par exemple' bsbs.lib' a besoin d'autre chose, par hasard? –