2010-11-26 40 views
0

Je développe une bibliothèque statique pour PC/Iphone."XXX", référencé à partir de: XXX constin libXXX.a (XXX.o) problème en utilisant C++ et C mélangés avec Objective C++ pour Iphone bibliothèque/jeu

Library est appelée libNerv.lib/libNERV.a

Le projet est écrit en C++ (+ Objectif C++ pour iPhone)

Jusqu'à présent tout a bien fonctionné pour pc et iphone. L'application de jeu utilise la bibliothèque et le relie très bien. mais maintenant je dois utiliser libpng pour le projet. Je souhaite partager une bibliothèque, j'ai donc inclus le fichier .c de libpng dans mon projet de bibliothèque. Sur les fenêtres tout fonctionne bien! Le jeu peut se lier à ma bibliothèque sans problème.

Aujourd'hui j'ai déménagé sur Iphone ajouté les fichiers libpng au projet iphone et la bibliothèque se construit très bien. Dès que je construis l'application de jeu l'éditeur de liens échoue avec les messages suivants:

"_png_read_image", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


    "_png_create_read_struct", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


    "_png_read_end", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


    "_png_destroy_read_struct", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


    "_png_read_info", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


    "_png_read_update_info", referenced from: 


     NERV::Video::LoadPNG::loadImage(NERV::IO::IFileReader*) constin libNERV.a(LoadPNG.o) 


ld: symbol(s) not found 


collect2: ld returned 1 exit status 

Ceci est un problème car il ignors simplement tous mes essais. (NOTE, il woks avec VS 2008 sur pc !!) J'ai essayé plusieurs choses pour se débarasser des erreurs d'éditeur de liens:

J'ai essayé de changer tous les fichiers libpng de .c à cpp qui a fonctionné très bien, je J'avais juste à résoudre 2 erreurs typecast (void * en char *), mais j'avais toujours les mêmes erreurs. J'ai essayé de créer une bibliothèque pour les fichiers libpng. Mais ça n'a pas marché non plus.

J'ai essayé d'ouvrir mon libNerv.a avec ar, libtool, ranlib sans succès (me dit qu'il est créé avec la graisse ... ou quelque chose)

fichiers libpng utiliser les déclarations extern C pour les projets cpp afin Je ne sais pas s'il est bon de le compiler avec cpp. Peut-être que quelqu'un en sait plus à ce sujet aussi.

Il est chose que je ne l'ai pas encore essayé. Je vais ajouter les fichiers libpng à l'application de jeu et le compiler avec l'application, mais je ne pense pas que cela fonctionnera. (Note: tous les problèmes de référence sont dans la même méthode, et je n'utilise pas libpng ailleurs - cette méthode se trouve dans libNerv.a qui se construit sans problème. l'application iphone!)

J'espère que quelqu'un peut me aider avec cette question :)

Répondre

0

est-ce que vous ajoutez le résultat libpng.a (ou quelque chose comme ça) comme l'une des bibliothèques liées à l'exécutable principal ?

Vous avez créé libNERV.a, ce qui signifie que vous avez ajouté libpng.a dans la liste des bibliothèques utilisées pour créer libNERV.a.

Mais vous devez spécifier libpng.a dans le cadre de liaison pour l'exécutable principal, aussi.

+0

Fondamentalement libpng n'est pas une bibliothèque qui serait un lib, ne dois-je créer un lien libpng.a à libnerv.a. J'inclus .c et .h de libpng à mon projet libnerv.a et juste compiler alltogether dans libnerv.a par exemple: fichiers (bibliothèque): fichiers de base, les fichiers de service, les fichiers PNG, les fichiers zlib SORTIE: libnerv .un (lié à libs standards) fichiers (application): les fichiers de jeu SORTIE: game.app (liées à libnerv.a et libs standards) Mais j'ai essayé de compiler une seule bibliothèque incluant uniquement des choses .png donc je lien nerv.a et png.a avec mon application (mais il y avait le même projet) – odbb

+0

Mmm ... qui devrait fonctionner, alors. Pourriez-vous poster la ligne de commande qui fait libnerv.a et votre exécutable principal? Il est enterré dans la fenêtre Build de XCode. – Yuji

+0

Je ne sais pas pourquoi parce que je n'ai tout simplement rien changé:/mais ça marche tout de suite ... Mais peut-être que ça se reproduira, où trouverais-je la ligne de commande exactement, car je ne suis pas sûr de ce que tu veux dire Seached quelque chose de comparable à la fenêtre de sortie VS :) – odbb