cari

Rumah  >  Soal Jawab  >  teks badan

clang编译objective-c失败

#import <Foundation/Foundation.h>

extern void _objc_autoreleasePoolPrint();

int main(int argc, char * argv[]) {
    @autoreleasepool {
        Person *p = [Person new];
        Person __weak *p2 = p;
        _objc_autoreleasePoolPrint();
    }
}

结果是这样的:

$ clang -rewrite-objc -fobjc-arc main.m
/var/folders/t0/nty3j9vx1rn8786q_tpclydc0000gn/T/main-2fe2fd.mi:46509:31: error: cannot create __weak reference
      because the current deployment target does not support weak references
        Person __attribute__((objc_ownership(weak))) *p2 = p;
                              ^
1 error generated.

求解答

怪我咯怪我咯2757 hari yang lalu735

membalas semua(3)saya akan balas

  • 天蓬老师

    天蓬老师2017-05-02 09:34:47

    Bukankah __Lemah sepatutnya berada di hadapan nama kelas?

    balas
    0
  • 阿神

    阿神2017-05-02 09:34:47

    Lemah memerlukan sokongan daripada persekitaran masa jalan.

    xcrun --show-sdk-path > SDK_PATH;clang -x objective-c -isysroot $SDK_PATH -rewrite-objc -fobjc-arc -fblocks -mios-version-min=8.0.0 -fobjc-runtime=ios-8.0.0 -O0 main.m

    Apabila anda memilih versi minimum yang sesuai, anda boleh menyusun kod sumber dengan pembolehubah diubah suai yang lemah.

    balas
    0
  • 習慣沉默

    習慣沉默2017-05-02 09:34:47

    Parameter tulis semula-objc "mengeksport" kod objc ke dalam kod c++ dan __weak diubah suai apabila objc ARC dikompilasi Adakah anda mahu menyusun atau menukar?
    Untuk menukar, tukar __lemah kepada __unsafe_unretained.
    Alih keluar parameter tulis semula-objc semasa menyusun.

    $ clang -fobjc-arc main.m -o main.o
    $ ./main.o
    objc[91465]: ##############
    objc[91465]: AUTORELEASE POOLS for thread 0x7fff7c93f000
    objc[91465]: 1 releases pending.
    objc[91465]: [0x7f8471000000]  ................  PAGE  (hot) (cold)
    objc[91465]: [0x7f8471000038]  ################  POOL 0x7f8471000038
    objc[91465]: ##############

    balas
    0
  • Batalbalas