discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: incompatible ABI when using the GUI


From: Lloyd Sargent
Subject: Re: incompatible ABI when using the GUI
Date: Mon, 21 Oct 2013 15:01:24 -0500

Okay, much of you answer is clear as mud to me as I don't know what they mean:

1. non-fragile ABI is indicated by the -fobjc-nonfragile-abi if I'm not 
correct. I have compiled the sample program and get the same issue.

2. If the issue is that EVERYTHING needs to be compiled with the 
-objc-nonfragile-abi, then I'm at a loss at how to do this - nor does the 
GNUstep website indicate how to do so.

3. What does gnustep-1.7 mean? Is that the legacy (non-ARC) or the (ARC) or GC 
or something altogether different?

4. I appreciate your answer, but it still doesn't suggest a way for me to get 
from where I am (code not running) to where I want to be. BTW, libdispatch and 
base appear to work just fine, it is the gui that crashes and burns.

5. It's not that I don't appreciate you answer, but I fail to see how it gets 
me any closer to where I want to be. Yes, I'm quite aware that things are not 
working and there is an ABI mismatch. I think the question is more "how do I 
get from this mismatch" to something that is NOT a mismatch.

Cheers,

Lloyd

On Oct 21, 2013, at 10:06 , David Chisnall <theraven@sucs.org> wrote:

> ARC is only supported with the non-fragile ABI.  If you specify 
> -fobjc-runtime=gnustep and -fobjc-arc, then it should default to the 
> equivalent of -fobjc-runtime=gnustep-1.7.  The rest of your code appears to 
> be compiled with the legacy (GCC-compatible) ABI (-fobjc-runtime=gnustep, 
> with no version, which is strongly discouraged).
> 
> I'd recommend copying how the packages are built on FreeBSD.  The GNUstep and 
> libdispatch ports work out of the box in this configuration.
> 
> David
> 
> On 21 Oct 2013, at 15:16, Lloyd Sargent <lloyd.sargent@gmail.com> wrote:
> 
>> Basically, I followed the instructions here: 
>> http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux
>> 
>> With the extra step of building the gui and back.
>> 
>> If I build and run a non-gui program, all works well. Only when I add 
>> something that uses the gui, like the following:
>> 
>>   //  Created by Tobias Lensing on 2/22/13.
>>   #import <Foundation/Foundation.h>
>>   #import <AppKit/AppKit.h>
>>   #import <dispatch/dispatch.h>
>> 
>>   int main(int argc, const char * argv[])
>>   {    
>>       @autoreleasepool {
>>           int multiplier = 7;
>>           int (^myBlock)(int) = ^(int num) {
>>               return num * multiplier;
>>           };
>> 
>>           NSLog(@"%d", myBlock(3));
>> 
>>           dispatch_queue_t queue = dispatch_queue_create(NULL, NULL); 
>> 
>>           dispatch_sync(queue, ^{
>>               printf("Hello, world from a dispatch queue!\n");
>>           });
>> 
>>   //            dispatch_release(queue);       // ARC takes care of this 
>>       }
>> 
>>       @autoreleasepool {
>>           [NSApplication sharedApplication];
>>           NSRunAlertPanel(@"Test", @"Wow it works!", @"OK", nil, nil);
>>       }
>> 
>>       return 0;
>>   }
>> 
>> I compile this with the following:
>> 
>>   clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` 
>> -fobjc-arc -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-gui 
>> test.m
>> 
>> It compiles and links with no errors.
>> 
>> When I run it, however, it spits out the following ugly-gram:
>> 
>>   Hello, world from a dispatch queue!
>>   Objective-C ABI Error: Loading modules from incompatible ABI's while 
>> loading .GSBackend.m
>>   a.out: /home/lloyd/projects/ThirdParty/BuildGnuStep/libobjc2/loader.c:53: 
>> void __objc_exec_class(struct objc_module_abi_8 *): Assertion 
>> `objc_check_abi_verion(module)' failed.
>>   Aborted (core dumped)
>> 
>> I have assured myself that there is no other version of libobjc (this is on 
>> a virtual machine so I can go back redo my steps).
>> 
>> Commenting out the following:
>> 
>>   // [NSApplication sharedApplication];
>>   // NSRunAlertPanel(@"Test", @"Wow it works!", @"OK", nil, nil);
>> 
>> and everything compiles and runs, aside from the GUI obviously.
>> 
>> How can I have two ABI's when I build everything from scratch? Do I need to 
>> configure the GUI differently? I've been puzzling over this for a couple of 
>> weeks.
>> 
>> My goal is to have ARC, the GUI and (optionally) blocks.
>> 
>> 
>> _______________________________________________
>> Discuss-gnustep mailing list
>> Discuss-gnustep@gnu.org
>> https://lists.gnu.org/mailman/listinfo/discuss-gnustep
> 
> 
> 
> 
> -- Sent from my brain
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]