【问题标题】:Gnustep with Arc and Gui fails INCOMPATIBLE ABIs带有 Arc 和 Gui 的 Gnustep 失败了不兼容的 ABI
【发布时间】:2013-10-21 14:00:11
【问题描述】:

基本上,我按照这里的说明进行操作: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?这几周我一直在困惑。

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 我必须添加 -L/usr/GNUstep/Local/Library/Libraries 才能链接,但它仍然有同样的错误。该线程可能很有趣,但我不确定它是如何相关的(因为它已经接近一年了)。
    【解决方案2】:

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

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

    很遗憾,在提出问题之前我没有找到这个网站。现在我有了 Objective C、ARC、blocks 和 GNUstep!

    【讨论】:

    • 这是一个明显的笑话,不要毁了它。
    • 嗯,不知道是什么玩笑,但它解决了我的问题。
    • 我相信您链接到了网站的首页,而不是文章本身。您可能指的是这个:feloneouscat.wordpress.com/2013/10/25/…
    猜你喜欢
    • 2010-12-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2018-01-07
    相关资源
    最近更新 更多