与Arc和Gui合作的Gnustep失败了ABIs

时间:2013-10-21 14:00:11

标签: objective-c automatic-ref-counting gnustep

基本上,我按照此处的说明操作:http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux

通过建造gui和背部的额外步骤。

如果我构建并运行非gui程序,一切运行良好。只有当我添加使用gui的东西时,如下所示:

//  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;
}

我用以下内容编译:

clang `gnustep-config --objc-flags` `gnustep-config --objc-libs` -fobjc-arc -fobjc-runtime=gnustep -fblocks -lobjc -ldispatch -lgnustep-gui test.m

它编译并链接没有错误。

然而,当我运行它时,它会吐出以下难看的东西:

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)

我向自己保证,没有其他版本的libobjc(这是在虚拟机上,所以我可以回去重做我的步骤。)

评论以下内容:

// [NSApplication sharedApplication];
// NSRunAlertPanel(@"Test", @"Wow it works!", @"OK", nil, nil);

除了GUI之外,一切都在编译和运行。

当我从零开始构建所有内容时,如何才能拥有两个ABI?我需要以不同方式配置GUI吗?几个星期以来,我一直在为此感到困惑。

2 个答案:

答案 0 :(得分:1)

对不起,评论太久了:

嗯,我不确定你确切的问题,但你有3个ABI&#39; a而不仅仅是正常2(gnustep,脆弱,不脆弱)......我不是该领域的绝对专家,但我相信你可以对新的苹果非易碎ABI运行gnustep ...所以有可能不是你拥有的ABI,但它是被选中的那个:gnustep-config --objc-libs,你可以尝试省略......

我总是使用gnustep-make,但是我已经做了很长时间的gnustep,并且不知道这是否仍然是首选。

我找到了一个有趣的帖子:http://comments.gmane.org/gmane.comp.lib.gnustep.general/38698

答案 1 :(得分:1)

好吧,经过多次搞乱后,我发现,令我惊讶的是,我错误地构建了一切。

我会进入漫长,深刻,痛苦的过程,但是this website actually has a nice set up, scripts, and everything

可悲的是,我在问我的问题之前没有找到这个网站。现在我有Objective C,ARC,blocks和GNUstep!