2009-09-29 9 views
3

J'essaye de construire libdecodeqr sur un mac. Mon histoire de construction et de liaison C++ est tout sur Windows, donc c'est un voyage passionnant de découverte.Symbole non défini _main lors de la tentative de construction de la bibliothèque partagée g ++/mac

Je suis finalement arrivé au point où je veux créer la bibliothèque liée. La commande Je suis en cours d'exécution est:

g++ -shared -o libdecodeqr.so.0.9.3 bitstream.o codedata.o container.o ecidecoder.o formatinfo.o galois.o imagereader.o libdecodeqr.o -L/opt/local/lib -arch i386 -lcxcore -lcv 

Le résultat est:

Undefined symbols: 
    "_main", referenced from: 
     start in crt1.10.5.o 

j'avais l'impression que la création d'une bibliothèque à l'aide -shared signifiait que je ne devrais pas avoir besoin d'une fonction principale. Il n'y en a certainement pas dans le code source.

Juste pour les coups de pied j'ai ajouté int main() {return 0;} à l'un des fichiers cpp et reconstruit. Le tout a été compilé et lié, mais quand j'ai essayé d'utiliser la sortie comme une bibliothèque, j'ai eu des erreurs me disant que je ne pouvais pas créer un lien vers un exécutable principal. Cela a du sens, je suppose.

Y at-il quelque chose d'autre que je dois passer à g ++ pour lui dire de construire une bibliothèque?

Répondre

7

-shared n'est pas pris en charge sur OSX. Utilisez -dynamiclib ou -bundle (en fonction du type de bibliothèque partagée que vous souhaitez créer).

+0

Parfait, merci. –

Questions connexes