Неопределенные символы для архитектуры armv7: "_SCNetworkReachabilityCreateWithAddress"
Правильно, это стало правильной болью, я смотрю на это в течение 2 дней и не могу решить это. Вот ошибка, которую я получаю.
Undefined symbols for architecture armv7:
"_SCNetworkReachabilityCreateWithAddress", referenced from:
+[Reachability reachabilityWithAddress:] in Reachability.o
"_SCNetworkReachabilityCreateWithName", referenced from:
+[Reachability reachabilityWithHostName:] in Reachability.o
"_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from:
-[Reachability stopNotifier] in Reachability.o
"_SCNetworkReachabilityScheduleWithRunLoop", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilitySetCallback", referenced from:
-[Reachability startNotifier] in Reachability.o
"_SCNetworkReachabilityGetFlags", referenced from:
-[Reachability connectionRequired] in Reachability.o
-[Reachability currentReachabilityStatus] in Reachability.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я добавил SystemConfiguration.framework, и он, похоже, не хочет ничего с этим делать, так как эта ошибка просто не исчезнет. Я рассмотрел довольно много таких же проблем, но многие из них подтвердили любые ответы. Этот вид только развился за выходные, когда никто не прикоснулся к нему. Может кто-нибудь помочь.
РЕДАКТИРОВАТЬ Забыл добавить этот бит.
ld: warning: игнорирование файла /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/SystemConfiguration, отсутствует необходимая архитектура armv7 в файле
РЕДАКТИРОВАТЬ
Хорошо, благодаря @gaige, я нашел проблему; перед SystemConfiguration.framework есть дополнительный слеш, которого там быть не должно. Я удалил рамки и снова добавил, и это не помогло. Как я могу удалить эту дополнительную косую черту?
3 ответа
Обычно лишние косые черты не портят процесс сборки в стиле UNIX.
Но вам нужно убедиться, что архитектура armv7 находится внутри файла фреймворка, который пытается использовать ваша сборка. Для этого используйте lipo -info
команда в командной строке:
lipo -info /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/System/Library/Frameworks//SystemConfiguration.framework/SystemConfiguration
Вы должны увидеть результат примерно так:
Architectures in the fat file: SystemConfiguration are: armv6 armv7
Если вы этого не сделаете, ваш проект, вероятно, настроен для ссылки на неправильную версию SystemConfiguration.framework. На вашем компьютере есть несколько версий этой платформы. Итак, я бы проверил путь фреймворка (т.е. SystemConfiguration), который у вас есть в вашем проекте.
Обычно я ожидаю, что этот файл будет примерно таким (с учетом версии ОС, которую вы используете):
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/System/Library/Frameworks/SystemConfiguration.framework
У меня была эта проблема в течение 8 часов с проектом Cordova и org.apache.cordova.network-information
плагин. По ответам выше и нескольким другим ответам мне было предложено поискать в разделе Project > Target > Build Phases > Link Binary with Libraries
Xcode, который был прав.
Но хотя SCNetworkReachabilityCreateWithAddress
определяется в SystemConfigration.framework
Я не смог избавиться от ошибок компоновщика, систематически добавляя и удаляя эту и другие библиотеки.
Наконец, я создал новый проект с плагином и скопировал структуру фреймворка точно так же, как и оригинал. Теперь это работает.
Заключение:
- Если возможно, создайте новый проект с необходимыми расширениями и скопируйте из него созвездия. Это может помочь.
- Иногда библиотека слишком много включена, поэтому снимите ее. Иногда это наоборот.
- Чтобы копать глубже, проверьте
SystemConfiguration.framework
как описано в выдающихся ответах выше. Это может не соответствовать целевой архитектуре. Далее, проверьте наличие странных символов в сборке, включая пути.