2013-07-19 2 views
0

J'ai une bibliothèque statique que j'ai compilée avec gcc sans le mode c99. J'essaie de le lier en compilation en utilisant gcc -std = c99. Cela me donne une erreur:Liaison d'une bibliothèque statique autre que C99 en mode C99

undefined reference to 'functionName'

Ici, functionName est fonction dans la bibliothèque statique.

C'est ma compilation:

gcc -std=c99 -g -I../ -Llib/ -lmylib test.c ../file1.c ../file2.c -o test 

J'utilise C99 ici parce que mon code dans #includes de Test.c fichiers en-tête dont la mise en œuvre utilise la norme C99. La bibliothèque statique (lib/libmylib.a) n'est pas compilée avec la norme c99 car son code utilise certaines bibliothèques qui ne parviennent pas à compiler en mode C99 (mais compile sans l'indicateur c99).

J'ai également essayé de changer l'ordre des -L & -l drapeaux à la fin & immédiatement après gcc -std = c99 mais il a donné la même erreur 'référence non définie'.

Comment les relier ensemble?

Merci.

EDIT: La fonction que je l'ai mentionné comme functionName est un pseudonyme montré ici setupStacktrace(): http://pastebin.com/2RbEEPaj. C'est la signature est void setupStacktrace();

+0

Etes-vous certain que 'functionName' est défini dans l'un des fichiers/bibliothèques source, et qu'il n'est pas défini' inline'? – Casey

+2

Bibliothèques après les fichiers objets! Essayez: 'gcc -std = c99 -g -I ../ -Llib/test.c ../fichier1.c ../fichier2.c -lmylib -o test' –

+0

@Casey que' nomFonction' est à l'intérieur de la statique bibliothèque. Éditera la question pour ajouter de la clarté. – Bharat

Répondre

1

L'ordre des arguments de ligne de commande est important. De la façon dont vous l'avez maintenant, l'éditeur de liens parcourt vos bibliothèques statiques, se rend compte que rien jusqu'à présent n'a besoin de quoi que ce soit et rejette tout ce qu'il contient. Faites ceci:

gcc -std=c99 -g -I../ -Llib/ test.c ../file1.c ../file2.c -lmylib -o test 
+0

comme je l'ai mentionné dans un commentaire sous ma question, j'ai essayé cet ordre mais il échoue :( – Bharat

+0

@RBK alors quelque chose d'autre est faux, comme la fonction n'existe pas dans votre bibliothèque statique (lancer l'outil 'nm' sur votre bibliothèque statique et voir quelles sont les fonctions qu'elle contient), vous avez mal orthographié le nom, vous êtes en train de créer un autre «mylib» que ce que vous pensez faire, ou quelque chose d'autre que vous ne nous aviez pas dit.Ce n'est pas un problème avec la liaison au code qui n'est pas C99 (sauf si vous l'avez compilé avec un compilateur C++). – nos

+0

Merci! Il y avait 2 problèmes - comme vous l'avez dit j'avais mal orthographié le nom de la fonction. Corrigé cela. A également dû mettre le -lmylib avant le -o. N'a pas travaillé autrement. Désolé pour le retard de retour car je n'ai pas eu accès à ma machine de travail pendant le week-end. – Bharat