«XXX», по ссылке из: XXX constin libXXX.a (XXX.o) проблема с использованием C ++ и C в сочетании с Objective C ++ для библиотеки / игры Iphone - PullRequest
0 голосов
/ 26 ноября 2010

Я разрабатываю статическую библиотеку для ПК / Iphone.

Библиотека называется libNerv.lib / libNERV.a

Проект написан на C ++ (+ Objective C ++ для iphone)

До сих пор все работало нормально для ПК и iphone.Игровое приложение использует библиотеку и прекрасно ее связывает.но теперь я должен использовать libpng для проекта.Я хочу поделиться одной библиотекой, поэтому я включил файл .c из libpng в свой библиотечный проект.На windows все работает отлично!Игра может связываться с моей библиотекой без проблем.

Сегодня я перешел на Iphone, добавил файлы libpng в проект iphone, и библиотека работает нормально.Как только я создаю игровое приложение, компоновщик выходит из строя со следующими сообщениями:

  "_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

Это проблема, потому что он просто игнорирует все мои попытки.(ПРИМЕЧАНИЕ: он работает с VS 2008 на ПК !!) Я пытался избавиться от ошибок компоновщика несколькими способами:

Я пытался изменить все файлы libpng с .c на cpp, которые работали довольно хорошо,Мне просто нужно было решить 2 ошибки типа (void * to char *), но у меня были те же ошибки.Я попытался создать собственную библиотеку для файлов libpng.Но это тоже не сработало.

Я пытался открыть свой libNerv.a с помощью ar, libtool, ranlib, но безуспешно (только что сказал, что он создан с помощью fat ... или что-то в этом роде)

Файлы libpng используют объявления extern C для проектов cpp, поэтому я не знаю, хорошо ли это скомпилировать с помощью cpp.Может быть, кто-то знает больше об этом тоже.

Есть кое-что, что я еще не пробовал.Я добавлю файлы libpng в игровое приложение и скомпилирую его с приложением, но я не думаю, что это будет работать.

(Примечание: все проблемы со ссылками выполняются в одном методе, и я не используюlibpng где-нибудь еще - этот метод находится в libNerv.a, который собирается без проблем. Проблемы возникают только тогда, когда libNerv.a связан с приложением iphone!)

Я надеюсь, что кто-то может помочь мне с этой проблемой :)

1 Ответ

0 голосов
/ 26 ноября 2010

Вы добавили полученный libpng.a (или что-то в этом роде) в качестве одной из библиотек, связанных с основным исполняемым файлом ?

Вы успешно создали libNERV.a, что означает, что вы добавили libpng.a в список библиотек, использованных для создания libNERV.a.

Но вам нужно указать libpng.a в настройке компоновщика дляосновной исполняемый файл тоже.

...