2013-10-21 6 views
1

는 기본적으로, 여기의 지침에 따라 호환되지 않는 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 주 동안 의아해하고 있었다. 죄송합니다

답변

1

좋아, 이후 많은 장난 나는, 놀람, 내가 다 잘못 구축 된 것을 발견 :

나는 흥미로운 스레드를 발견했다.

나는 길고 깊고 고통스러운 과정으로 들어가 겠지만, this website actually has a nice set up, scripts, and everything.

슬프게도 내 질문을하기 전에이 웹 사이트를 찾지 못했습니다. 이제 Objective C, ARC, 블록 및 GNUstep이 있습니다!

+0

그 블로그 게시물에 따르면 오늘 게시되었습니다 ... –

+0

그것은 명백한 농담을 파멸하지 않습니다. –

+0

글쎄, 농담은 무엇인지 모르겠지만 내 문제를 해결했습니다. –

1

댓글 너무 오래 :

그럼 그냥 보통 2 (그누 스텝, 깨지기 쉬운, 깨지지되지 않음) 나는 정확한 문제는 당신의 확실하지 오전하지만 당신은 3 ABI'a보다는 고려해야합니다. .. 나는 그 지역에 대한 절대적인 전문가는 아니지만, 당신이 새로운 사과가 아닌 깨지기 쉬운 ABI에 대항 할 수 있다고 믿습니다 ... 그래서 당신이 가지고있는 ABI가 아닌 가능합니다,하지만 그것은 gnustep-config --objc-libs으로 선택하면 그 것을 생략 해 볼 수 있습니다.

나는 항상 gnustep-make를 사용했으나, 오랫동안 많은 gnustep을 수행하지 못했으며, 여전히 선호되는지 모르겠다. http://comments.gmane.org/gmane.comp.lib.gnustep.general/38698

+0

링크하기 위해 -L/usr/GNUstep/Local/Library/Libraries를 추가해야했지만 여전히 동일한 오류가있었습니다. 쓰레드가 흥미로울 수도 있지만, 어떻게 관련이 있는지 잘 모르겠습니다. –