1

基本上,我按照这里的说明进行操作: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?我已经为此困惑了几个星期。

4

2 回答 2

1

好吧,经过一番折腾,我发现,令人惊讶的是,我把所有东西都弄错了。

我会进入漫长、深入、痛苦的过程,但这个网站实际上有一个很好的设置、脚本和一切

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

于 2013-10-25T21:26:32.560 回答
1

抱歉,评论太长了:

好吧,我不确定你的确切问题,但你有 3 个 ABI'a 需要考虑,而不仅仅是正常的 2 个(gnustep,脆弱,不脆弱)......我不是该领域的绝对专家,但我相信你可以针对较新的苹果非脆弱 ABI 运行 gnustep ......所以它可能不是你拥有的 ABI,但它是被选择的那个: gnustep-config --objc-libs,你可以尝试省略它......

一直用gnustep-make,但是很久没做太多gnustep了,不知道是不是还是首选。

我确实找到了一个有趣的线程:http ://comments.gmane.org/gmane.comp.lib.gnustep.general/38698

于 2013-10-21T14:13:52.867 回答