Я недавно обновил к 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, но с моим собственным lib, таким образом, решения упомянули, там не применимы здесь.
Библиотека включена под "Двоичным файлом Ссылки С Библиотеками" моей цели, пути поиска библиотеки корректны (проверил это с XCode и с редактором простого текста непосредственно в моем файле проекта), и правильно добавил к команде gcc.
Я использую iPhone Simulator 3.2 в качестве Основы SDK, но та же проблема происходит с SDK 4.0. Снова, это работает с моей целью устройства, но не с моей целью средства моделирования. Это работало с обоими, тем не менее, прежде чем я обновил от iPhone SDK 3.2 до 4,0. Я также смог воспроизвести эту ошибку путем создания нового проекта только с одним файлом и связанным lib. Однако lib должен быть хорошо, поскольку он работал со средством моделирования 3.2, прежде чем я обновил XCode и мой SDK.
Больше Фактов: Mac OS X 10.6.3, XCode 3.2.3 64-разрядных, iPhone OS 3.2, GCC 4.2
Любая справка высоко ценилась бы.
Править:
После переустановки SDK 3.2 все работало как ожидалось снова. Это должно быть отмечено, что SDKs в папке,/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs, перезаписываются с каждой установкой. Я затем пытался переустановить SDK 4.0 снова и ту же ошибку как выше произошедшего. Я ничего не изменил в своем проекте и всегда использовал 3.2 в качестве Основы SDK.
Проблема может поэтому возможно быть сужена к следующим опциям:
Я также сделал разность папки на/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.2.sdk и для старого и для новой версии этой папки. Оказалось, что существуют на самом деле незначительные изменения в "том же" SDK. Я все еще думаю, что это - проблема флага IDE/compiler, все же.
Кто-либо какие-либо идеи? Я не хочу придерживаться 3.2 навсегда...
Я наконец смог выяснить, какие флаги отсутствовали в моем вызове компилятора для создания моей библиотеки. Итак, чтобы ответить на мой вопрос: если у кого-то есть проблемы с привязкой его / ее статической библиотеки к цели в XCode 3.2.3 (с использованием iPhoneSimulator3.2.sdk или iPhoneSimulator4.0.sdk), вам необходимо создать свою библиотеку со следующим два флага:
-fobjc-abi-version = 2
-fobjc-legacy-dispatch
Еще раз спасибо PhoneyDeveloper за его подсказки .
Убедитесь, что вы перекомпилировали свои библиотеки с тем же базовым SDK, который вы используете для своего приложения.