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проект. Рекомендуется последний.

Измените цель развертывания на iOS 8.1.

Другие вопросы по тегам