2010-11-17 7 views
1

Je reçois un "impossible de lier avec un exécutable principal" lorsque j'essaie de lier une bibliothèque précompilée à un fichier principal lors de la compilation.Qu'est-ce qui pourrait causer "ne peut pas lier avec un exécutable principal" sur une bibliothèque partagée?

hostname:folder user$ g++ -o add testadd.cc -ladd -lmultiply -L. 
ld: in ./libmultiply.dylib, can't link with a main executable 
collect2: ld returned 1 exit status 
hostname:folder user$ 

les deux bibliothèques (ajouter et multiplier) où compilées auparavant, et sont présentes dans le même répertoire. Est-ce que quelqu'un peut me donner un indice de ce qui peut causer cette erreur?

Thanx

PS: Mac OS X 10.6.4 avec g ++ - 4.2.1

+0

Veuillez nous montrer comment vous construisez les bibliothèques - compilez et liez les commandes. –

+0

Avez-vous défini une fonction main() dans l'une de vos bibliothèques? – fabrizioM

Répondre

0

Je bidouillé un peu, et apparemment je l'ai fixé ...

Avant compila les lib partagé avec

g++ -o libmultiply.dylib libmultiply.cc -dynamiclib 

et a reçu l'erreur mentionnée. Maintenant, j'ai recompilé la bibliothèque à nouveau, avec

g++ -o libmultiply.dylib libmultiply.cc -dynamiclib -undefined dynamic_lookup 

et cela semble fonctionner maintenant. (Au moins la compilation et la liaison.) Mais j'ai encore besoin de vérifier, si la lib fait ce à quoi elle est destinée. Jusqu'à présent, je ne sais pas pourquoi le lien ne signale pas l'erreur, mais peut-être que quelqu'un d'autre peut faire la lumière avec ces infos. =)

juste mes 2 ct.

1

Pour votre information:

Lorsque vous utilisez le compilateur -dynamiclib-switch et vous obtenez l'erreur mentionné ci-dessus, Essayez de compiler avec -dynamiclib -undefined dynamic_lookup à la place.

Pour moi, cela a fonctionné. :)

Questions connexes