• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit


  • Subject: Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
  • From: Eyal Redler <email@hidden>
  • Date: Mon, 22 Jun 2015 03:51:06 +0300

Thanks, I’ll try that asap but I’m still puzzled by the fact that it works just fine with 32 bits…
Any idea why?

Eyal


> On Jun 22, 2015, at 2:07 AM, Nick Blievers <email@hidden> wrote:
>
> Okay so that is exactly the problem. At run time the dynamic linker is going to try and resolve various symbols (lazy linking would avoid this on plain C symbols, and your code would probably work in that case, but things are a bit more complex with ObjC), including NSDataDetector.
>
> To avoid this you need to use something like NSClassFromString, so that all references to the object are dynamic.
>
> Something like this (rough pseudocode)
>
> Class NSDataDetectorClass = NSClassFromString(@"NSDataDetector”);
> if(NSDataDetectorClass)
> {
>     id detector = [NSDataDetectorClass dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
>
> etc
>
> }
>
>
> If you do it this way you can also avoid the strict version check… if NSDataDetector class exists, you don’t need a version check.
>
>
> Hope this helps,
>
> Nick
>
>> On 22 Jun 2015, at 8:53 am, Eyal Redler <email@hidden> wrote:
>>
>> Thanks for your response Nick.
>>
>> I’m not using NSClassFromString.
>>
>> Following is what I’m using. Note that this code works just fine in 32 bit and that the crash is at launch time - way before this code is actually executed, if at all.
>>
>> Eyal
>>
>> - (NSArray*)detectURLs
>> {
>> 	BOOL useHomegrown;
>>
>> 	useHomegrown=(floor(NSAppKitVersionNumber) < NSAppKitVersionNumber10_7);
>> 	if (useHomegrown)
>> 	{
>> 		return [self myDetectURLS];
>> 	}
>> 	else
>> 	{
>> 		NSMutableArray* result;
>> 		NSArray* matches;
>> 		NSError *error;
>> 		NSDataDetector *detector;
>>
>> 		result=nil;
>> 		error=NULL;
>> 		detector=[NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:&error];
>>
>> 		matches=[detector matchesInString:self options:0 range:NSMakeRange(0, [self length])];
>> 		for (NSTextCheckingResult* match in matches)
>> 		{
>> 			if ([match resultType] == NSTextCheckingTypeLink)
>> 			{
>> 				if (result==nil)
>> 					result=[[NSMutableArray alloc] init];
>> 				[result addObject:[match URL]];
>> 			}
>> 		}
>> 		return [result autorelease];
>> 	}
>> }
>>
>>
>>
>>
>>> On Jun 22, 2015, at 12:04 AM, Nick Blievers <email@hidden> wrote:
>>>
>>> It sounds like your run time checks aren’t right. Can you show us how you have done it? Are you using NSClassFromString()?
>>>
>>> Nick
>>>
>>>> On 22 Jun 2015, at 6:49 am, Eyal Redler <email@hidden> wrote:
>>>>
>>>> My fat 32/64 Mac app is crashing at launch on 10.6 as follows:
>>>>
>>>> Dyld Error Message:
>>>> Symbol not found: _OBJC_CLASS_$_NSDataDetector
>>>> Referenced from: /Applications/Mellel.app/Contents/MacOS/MyApp
>>>> Expected in: /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
>>>> in /Applications/MyApp.app/Contents/MacOS/MyApp
>>>>
>>>> 1. I’m aware that NSDataDetector is not available on 10.6 and I’m checking at run time to see if I can use it or if I need to use my home-grown stuff.
>>>> 2. Up until recently the app was 32 bit only, and ran just fine on 10.6
>>>> 3. I’ve just added 64 bit support so I suspected that the problem was related.
>>>>
>>>> I’ve asked the users to force the app to run in 32 bit mode and the problem is indeed gone so I guess it’s safe to conclude the problem only happens when you run in 64-bit mode (and possibly only on 10.6)
>>>>
>>>> What am I doing wrong here?
>>>>
>>>> Thanks in Advance,
>>>>
>>>>
>>>> Eyal Redler
>>>> ------------------------------------------------------------------------------------------------
>>>> "If Uri Geller bends spoons with divine powers, then he's doing it the hard way."
>>>> --James Randi
>>>> www.eyalredler.com
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Xcode-users mailing list      (email@hidden)
>>>> Help/Unsubscribe/Update your Subscription:
>>>>
>>>> This email sent to email@hidden
>>>
>>
>


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Xcode-users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


References: 
 >Symbol not found _OBJC_CLASS_ when launching app in 64 bit (From: Eyal Redler <email@hidden>)
 >Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit (From: Nick Blievers <email@hidden>)
 >Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit (From: Eyal Redler <email@hidden>)
 >Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit (From: Nick Blievers <email@hidden>)

  • Prev by Date: Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
  • Next by Date: Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
  • Previous by thread: Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
  • Next by thread: Re: Symbol not found _OBJC_CLASS_ when launching app in 64 bit
  • Index(es):
    • Date
    • Thread