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 :)
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
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
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