2015-08-10 3 views
0

Je veux changer un makefile existant pour inclure une autre bibliothèque statique que j'ai créée moi-même. J'ai suivi quelques instructions pour faire la bibliothèque; il contient actuellement tous les fichiers .o à l'exception de main.o. Appelons ma bibliothèque libABC.a. Si cela fait une différence, le paquet que je modifie est écrit en C++ et la bibliothèque que j'inclus est écrite en C.Makefile: ajouter une bibliothèque à un autre projet

Jusqu'à présent, j'ai ajouté -lABC à ma liste de bibliothèques et j'ai placé la bibliothèque dans le même répertoire que les autres bibliothèques de sorte que je ne dois pas ajouter une autre commande -L. J'ai déplacé tous les fichiers d'en-tête dans le répertoire /include du paquet (je ne sais pas si je devais le faire) donc je peux éviter d'ajouter une autre commande -I. La compilation en l'état ne me donne aucune erreur, mais si j'essaie d'ajouter une commande #include pour l'un des fichiers d'en-tête de la bibliothèque et que j'appelle une fonction, j'obtiens une erreur undefined reference to function().

Des idées sur ce que je peux faire?

+1

en-têtes sont écrits en C enveloppés dans 'extern "C"{}'? http://stackoverflow.com/questions/1041866/in-c-source-what-is-the-effect-of-extern-c –

Répondre

1

Étant donné que le paquet est écrit en C++ et votre bibliothèque est écrit en C, vous devez probablement utiliser extern "C" lien, puisque C++ attend probablement nom mutiler vos symboles.

La façon la plus simple est d'envelopper vos définitions de fonction C dans l'en-tête dans un bloc extern "C", comme:

#ifdef __cplusplus 
extern "C" { 
#endif 

int myFunction(); 
int someOtherFunction(char *); 

#ifdef __cplusplus 
} // extern "C" 
#endif 

Assurez-vous seulement envelopper vos propres définitions de fonctions au sein du bloc; Les bibliothèques externes que vous êtes en train de quitter de votre en-tête doivent être en dehors du bloc.

Voir aussi: In C++ source, what is the effect of extern "C"?