2017-01-13 7 views
1

Objective-Cには、Clangによって導入されたBlocksというラムダのような構文がありますが、ランタイムサポートが必要です。 Appleのランタイムの代わりに自分の環境がGNUStepのときにどうすれば使用できますか?GNUStepでのObjective-Cラムダ構文の使用

答えて

0

単純なテストするためのコードとラン(t.m):

#import <Foundation/NSAutoreleasePool.h> 
#import <Foundation/NSException.h> 
#import <Foundation/NSDebug.h> 
#import <Foundation/NSObject.h> 
#import <Foundation/NSString.h> 
#import <Foundation/NSObjCRuntime.h> 

#include <string.h> 

#if defined(GNUSTEP) 
#import <GNUstepBase/GSObjCRuntime.h> 
#else 
#include <objc/runtime.h> 
#endif 

void test(void (^callback)(void)) 
{ 
    callback(); 
} 

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool 
    { 
     int multiplier = 7; 
     int (^myBlock)(int) = ^(int num) 
     { 
      return num * multiplier; 
     }; 

     NSLog(@"%d", myBlock(3)); 

     test(^(void) 
     { 
      NSLog(@"Inside"); 
     }); 

     NSLog(@"BLAH"); 
    } 

    return 0; 
} 

のUbuntu 16でテスト

インストール:

apt-get install -y build-essential gobjc gobjc++ gnustep gnustep-devel libgnustep-base-dev clang gnustep-make llvm libblocksruntime-dev 

コンパイル:

clang -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` -lgnustep-base -fconstant-string-class=NSConstantString -D_NATIVE_OBJC_EXCEPTIONS -fblocks -lobjc -o t t.m -lBlocksRuntime 

ラン:

./t 

あなたはobjc/runtime.hダウンロードを欠落しているとのGNUstep libobjcを抽出している場合:

wget http://download.gna.org/gnustep/libobjc2-1.6.tar.gz 
tar xzvf libobjc2-1.6.tar.gz 
cp -r libobjc2-1.6/objc /usr/include/GNUstep 
関連する問題