Ошибка компоновщика (только симулятор) с собственной библиотекой после обновления до iPhone SDK 4.0 - PullRequest
6 голосов
/ 29 июня 2010

Я недавно обновился до iPhone SDK 4.0 и больше не могу создать свой проект для симулятора iPhone.Проблема в том, что ld:

"_OBJC_CLASS_$_Book", referenced from:
   objc-class-ref-to-Book in Category.o
   (maybe you meant: ...)
ld: symbol(s) not found
collect2: ld returned 1 exit status

больше не может найти классы одной из моих собственных библиотек. Я уже читал некоторые другие посты о подобных проблемах, например, здесь .«К сожалению», моя проблема не имеет ничего общего с платформой SDK, но с моей собственной библиотекой, поэтому упомянутые здесь решения здесь не применимы.

Библиотека включена в «Связать двоичные файлы с библиотеками» моегоtarget, пути поиска в библиотеке правильные (проверили это с помощью XCode и с помощью текстового редактора прямо в файле моего проекта) и правильно добавили в команду gcc.

Я использую iPhone Simulator 3.2 в качестве базового SDK, нота же проблема возникает с SDK 4.0.Опять же, это работает с моей целью устройства, но не с моей целью симулятора.Это работало с обоими, хотя, прежде чем я обновил с iPhone SDK 3.2 до 4.0.Я также смог воспроизвести эту ошибку, создав новый проект только с одним файлом и связанной библиотекой.Тем не менее, библиотека должна быть в порядке, так как она работала с симулятором 3.2, прежде чем я обновил XCode и мой SDK.

Дополнительные факты: Mac OS X 10.6.3, 64-битный XCode 3.2.3, iPhone OS 3.2, GCC4.2

Любая помощь будет принята с благодарностью.РЕДАКТИРОВАТЬ:

После переустановки SDK 3.2 все снова заработало как положено.Следует отметить, что SDK в папке /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs перезаписываются при каждой установке.Затем я попытался переустановить SDK 4.0 снова и возникла та же ошибка, что и выше.Я ничего не менял в своем проекте и всегда использовал 3.2 в качестве базового SDK.

Поэтому проблему можно сузить до следующих параметров:

  • Apple изменила sth.в Simulator SDK 3.2, который вызывает проблему
  • , изменение в XCode 3.2.3 вызывает проблему
  • неправильные / отсутствующие флаги компилятора при сборке моей собственной библиотеки (однако эти флаги будут вызывать толькопроблемы с измененным SDK или измененной IDE)

Я также сделал diff для папки на /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk как для старого, так и дляновая версия этой папки.Оказалось, что внутри «одного и того же» SDK действительно есть небольшие изменения.Тем не менее, я все еще думаю, что это проблема флага IDE / компилятора.

У кого-нибудь есть идеи?Я не хочу придерживаться 3.2 навсегда ...

Ответы [ 4 ]

1 голос
/ 08 июля 2010

Я наконец смог выяснить, какие флаги отсутствовали в моем вызове компилятора для сборки моей библиотеки. Итак, чтобы ответить на мой вопрос: если у кого-то возникнут проблемы с привязкой его / ее собственной статической библиотеки к цели в XCode 3.2.3 (с использованием iPhoneSimulator3.2.sdk или iPhoneSimulator4.0.sdk), вам нужно собрать свою библиотеку следующим два флага:

-fobjc-аби-версия = 2

-fobjc-наследие-диспетчерская

Еще раз спасибо PhoneyDeveloper за его подсказки .

1 голос
/ 08 июля 2010

Убедитесь, что вы перекомпилируете свои библиотеки с тем же базовым SDK, который вы используете для своего приложения.

0 голосов
/ 05 июля 2012

Я решил это, когда убрал флаги типа (-ObjC, -all_load) в разделе «Другие флаги компоновщика», которые я использовал в проекте. На самом деле был конфликт -all_load.

0 голосов
/ 27 августа 2011

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

Дважды проверьте, что вы не импортировали файлы, используя опцию «ссылки на групповые папки». Кажется, это вызывает головную боль у Xcode. (По крайней мере, в моем случае.)

...