는 기본적으로, 여기의 지침에 따라 호환되지 않는 ABI를 실패합니다.그누 스텝은
비 -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 주 동안 의아해하고 있었다. 죄송합니다
그 블로그 게시물에 따르면 오늘 게시되었습니다 ... –
그것은 명백한 농담을 파멸하지 않습니다. –
글쎄, 농담은 무엇인지 모르겠지만 내 문제를 해결했습니다. –