-1
votes

Puis-je définir une fonction externe C requise par une bibliothèque sans pas de compilation supplémentaire?

J'ai reçu une bibliothèque A code> qui attend là une fonction B () code> mais ne le met pas en œuvre. On dirait que ceci (je ne peux pas changer ce code):

ah strong>: p> xxx pré>

AC fort>: p> xxx pré>

La bibliothèque a été compilée comme ceci (supposer que tous les fichiers de ces exemples sont dans le même répertoire pour la simplicité).: p>

.//liba.so: undefined reference to `b'
collect2: error: ld returned 1 exit status


2 commentaires

Dans votre dernier exemple, lorsque vous compilez tout ce qui a la définition (non déclaration) pour B () ?


C'était ça! Ceci fait travaille, je venais d'oublier d'inclure B_V2.c dans l'étape de compilation. Il devrait ressembler à ceci: gcc MAIN_V3.C B_V2.C -L -L ./ -La -o principal


3 Réponses :


0
votes

Alors que le tapis a souligné, je négligais simplement d'inclure la source B_V2.C dans l'étape de compilation. Cela fonctionne:

gcc main_v3.c b_v2.c -L ./ -la -o main


0 commentaires

0
votes

Comment va-t-il différent de mon premier exemple de travail dans MAIN_V2.C?

dans la version 3, aucune implémentation de B () est même compilée, beaucoup moins liée dans l'exécutable final. Une déclaration seule n'est pas suffisante et comprenant un en-tête est complètement indépendant de compiler ou de relier un fichier source associé.

Notez que votre AC a exactement autant qu'une déclaration de < code> B () comme MAIN_V3.C acquiert à partir de BH , donc si rien dans Main_v3.c appelle cette fonction, puis Cet en-tête n'ajoute rien de nouveau ou utile.

Y a-t-il un moyen d'accomplir cela sans créer une bibliothèque séparée pour B ()?

Bien sûr, plusieurs. Mais le plus facile à utiliser pour vous d'utiliser pourrait être de nommer les deux fichiers source C sur la même ligne de commande de compilation: xxx

notez que j'ai choisi main_v1 < / code> intentionnellement: étant donné que rien dans l'appels de fichiers B () , il n'est pas utile pour une déclaration de cette fonction apparaître dans le fichier, que ce soit directement ou via l'inclusion d'en-tête. < / blockquote>


0 commentaires

0
votes

ah xxx pré>

alim p> xxx pré>

bc p> xxx pré>

compile P>

$> ./a.out


0 commentaires