dyld: символ не найден: ошибка, как решить эту проблему
У меня есть следующий код (приведенный ниже), где я использую NSURLConnection
для подключения и анализа строки ответа. Но я получаю следующую ошибку:
dyld: Symbol not found: _CFXMLNodeGetInfoPtr
Referenced from: /System/Library/Frameworks/Security.framework/Versions/A/Security
Expected in: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
in /System/Library/Frameworks/Security.framework/Versions/A/Security
Я работал над этим долгое время, не имея возможности исправить эту ошибку.
Я импортировал json.h и ASIHTTPRequest.h, все эти файлы, но это не исправило ошибку.
@implementation Websample1ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
dataWebService = [[NSMutableData data] retain];
NSMutableURLRequest *request = [[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/customsearch/v1?key=AIzaSyDzl0Ozijg2C47iYfKgBWWkAbZE_wCJ-2U&cx=017576662512468239146:omuauf_lfve&q=lectures&callback=handleResponse"]]retain];
NSURLConnection *myConnection = [NSURLConnection connectionWithRequest:request delegate:self];
[myConnection start];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[dataWebService setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[dataWebService appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *responseString = [[NSString alloc] initWithData:dataWebService encoding:NSUTF8StringEncoding];
NSLog(@"Response: %@",responseString);
[responseString release];
[dataWebService release];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Error during connection: %@", [error description]);
}
//class 2
@implementation WebJson
//parse JSON
- (void)requestCompleted:(ASIHTTPRequest *)request
{
NSString *responseString = [request responseString];
NSDictionary *dictionary = [responseString JSONValue];
NSDictionary *dictionaryReturn = (NSDictionary*) [dictionary objectForKey:@"request"];
NSString *total = (NSString*) [dictionaryReturn objectForKey:@"totalResults"];
NSLog(@"totalResults: %@", total);
NSString *search = (NSString*) [dictionaryReturn objectForKey:@"searchTerms"];
NSLog(@"searchTerms: %@", search);
int count = [[dictionaryReturn objectForKey:@"count"] intValue];
NSLog(@"count: %d", count);
}
7 ответов
Ошибки dyld вызваны отсутствующей или плохой связью библиотеки, а не кодом.
Дважды проверьте ссылки на свои фреймворки, не стесняйтесь удалять / восстанавливать ссылки, заботясь о версии iOS, с которой вы берете свои фреймворки. (обычно используйте предоставленный список XCode, не ищите файлы)
В вашем случае я не удивлюсь, что ссылки /System/Library/Frameworks/Security.framework
это ошибка, так как она не выглядит как принадлежащая iOS SDK, если посмотреть на ее путь...
Я думаю, что вместо этого должно быть что-то вроде: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator<Version>.sdk/System/Library/Frameworks/Security.framework
Тьфу. я тоже ударил Оказалось, что я случайно установил флажок, чтобы скопировать фреймворк в мой локальный каталог при добавлении фреймворка в мой проект.
удалите фреймворк из вашего проекта.
затем добавьте фреймворк, убедившись, что файлы не копируются.
Это также происходит, когда вы ссылаетесь на библиотеку, переменную или метод, который не скомпилирован в текущей ОС, на которую вы ориентируетесь.
Поэтому проверьте символ и посмотрите, есть ли он в наличии. Например, CFRelease(CFTypeRef cf)
доступно во всех платформах iOS, но CFAutorelease(CFTypeRef arg)
доступно только в iOS 7.0 (и Mac OSX 10.9) и выше, обозначенных CF_AVAILABLE(10_9, 7_0)
У меня также была эта проблема, и, похоже, это известная ошибка в CFNetwork в iOS 8 SDK (смотрите здесь: https://devforums.apple.com/message/971238).
Работа заключается в следующем:
Измените порядок ссылок в "Link Binary With Libraries" вашей цели и поместите Foundation.framework перед CFNetwork.framework.
Это решило проблемы для меня.
Я получил ту же ошибку, когда изменил суффикс, который использует мой исполняемый файл при загрузке фреймворков с суффикса 'no' на суффикс 'debug'. Я думаю, что отладочные фреймворки не обновляются Apple.
Вы можете получить немного, если вы используете 'debug' по другим причинам, а затем добавьте фреймворк, чья версия отладки не обновлена.
Как и в XCode 3, настройка суффикса доступна на панели "Общие" окна "Информация" вашего исполняемого файла.
Столкнулся с похожей проблемой при сборкеsentry
роднойSDK
наMac
.
Dyld Error Message:
Symbol not found: __ZNKSt3__115basic_stringbufIcNS_11char_traitsIcEENS_9allocatorIcEEE3strEv
Referenced from: /private/var/folders/*/ClassIn-LMS.app/Contents/MacOS/../Library/libsentry.dylib (which was built for Mac OS X 12.3)
Expected in: /usr/lib/libc++.1.dylib
Оказалось, что проблема в несоответствии. Я строю это наMacOs12.5
и этоMacOs12.3
по умолчанию. В то времяapp
использовать эту библиотеку, запущеннуюMacOs11.4
. Итак, он разбился и пожаловался на сообщение выше.
Заставьте его работать, установив правильную версию.
Об измененииDeployment Target
, вы можете изменить его, изменивDeployment target
поле вGeneral
вкладка в . Или установкаMACOSX_DEPLOYMENT_TARGET=10.12
env
перед созданиемXcode
проект. Рекомендуется последний.