dyld:符号未找到错误如何解决此问题

11
我有以下代码(如下所示),我正在使用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);
}

重复的问题?当启动Instruments时,出现“Symbol not found: _CFXMLNodeGetInfoPtr”的错误。 - Adrian
7个回答

22

dyld错误是由于缺失或者错误的库链接引起的,而非代码问题。

仔细检查你的框架链接,不要犹豫地删除/重新创建链接,并且注意使用的iOS版本。一般来说,使用Xcode提供的列表,不要浏览文件系统。

在你的情况下,我不会惊讶于将/System/Library/Frameworks/Security.framework链接进来导致错误,因为从路径上看它似乎并不属于iOS SDK...

我猜应该改为以下路径:/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator<Version>.sdk/System/Library/Frameworks/Security.framework


5

我也遇到过这个问题。后来发现是我在将框架添加到项目时,不小心勾选了将框架复制到本地目录的选项。

请先从项目中删除该框架。

然后重新添加框架时,请确保不要复制文件。


1
当你引用一个在当前操作系统中未编译的库、变量或方法时,也会发生这种情况。
因此,请检查该符号并查看其是否可用。例如,CFRelease(CFTypeRef cf) 在所有 iOS 框架中都可用,但是 CFAutorelease(CFTypeRef arg) 仅在 iOS 7.0 (和 Mac OSX 10.9) 及以上版本中可用,由 CF_AVAILABLE(10_9, 7_0) 指定。

0

当我将可执行文件加载框架的后缀从“no”更改为“debug”时,出现了相同的错误。我认为苹果没有及时更新调试框架。

如果您因其他原因使用“debug”,然后添加一个调试版本不是最新的框架,那么您可能会遇到这种情况。

在XCode 3中,“后缀设置”可在可执行文件的“获取信息”窗口的“常规”选项卡中找到。


0

我也遇到了这个问题,似乎是在 iOS 8 SDK 中 CFNetwork 的已知 bug(请参阅此处:https://devforums.apple.com/message/971238#971238)。

解决方法如下:

更改目标中“链接二进制文件库”中的链接顺序,并将 Foundation.framework 放在 CFNetwork.framework 之前。

这对我解决了问题。


0

在 Mac 上构建 sentry 原生 SDK 时,我遇到了类似的问题。

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。而 appMacOs11.4 上运行时使用了这个库。所以它崩溃并抱怨上面的消息。
通过设置适当的版本来使其工作,可以解决这个问题。
关于更改 部署目标,您可以通过修改 XcodeGeneral 选项卡中的 部署目标 字段来更改它。或者在生成 Xcode 项目之前设置 MACOSX_DEPLOYMENT_TARGET=10.12 env。后者是推荐的方法。

-2

将您的部署目标更改为iOS 8.1。


4
如果我没理解错的话,你可能希望把这个作为评论留下来。否则的话,如果你能提供更多信息就更好了。 - jazzurro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接