跨平台编译:具有'保留(或强)的属性'属性必须是对象类型

时间:2018-04-22 06:44:49

标签: xcode react-native clang node-gyp djinni

我需要帮助来解决使用特定Objective-C ++文件的编译错误。 它包含在Xcode项目中。在这种情况下,它编译没有错误。

我已经看到很多关于这个错误的其他问题,但到目前为止他们都没有帮助我。

这是XCode 9.3生成的命令行,我删除了与我的问题无关的选项:

    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c++ -arch x86_64 
-fmessage-length=0 -fdiagnostics-show-note-include-stack -fmacro-backtrace-limit=0 
-std=gnu++11 -stdlib=libc++ -fobjc-arc -DDEBUG=1 -DOBJC_OLD_DISPATCH_PROTOTYPES=0 
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator11.3.sdk 
-fasm-blocks -fstrict-aliasing -mios-simulator-version-min=8.0 -g -fvisibility-inlines-hidden -fobjc-abi-version=2 -fobjc-legacy-dispatch -MMD -MT dependencies

我使用node-gyp / djinni以跨平台的方式构建相同的代码。 这是目标c gyp目标:

  {
      "target_name": "djinni_objc",
      "type": "static_library",
      "xcode_settings": {
        "CLANG_ENABLE_OBJC_ARC": "YES",
      },
      "sources": [
        "<!@(python glob.py objc  '*.cpp' '*.mm' '*.m' '*.h')",
        "proxy_cache_impl.hpp",
        "proxy_cache_interface.hpp",
      ],
      "include_dirs": [
        "objc",
      ],
      "direct_dependent_settings": {
        "include_dirs": [
          "objc",
        ],
      },
    },

此目标生成此clang命令行:

c++ '-DNODE_GYP_MODULE_NAME=djinni_objc' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' 
'-D_FILE_OFFSET_BITS=64' -Os -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64-Wall -Wendif-labels -std=gnu++0x 
-stdlib=libc++ -fno-threadsafe-statics -fno-strict-aliasing -fobjc-arc -fno-strict-aliasing -fobjc-arc -fobjc-arc -MMD

我再次删除了与问题无关的编译选项。

编译错误是:

错误:属性为&#39;保留(或强烈)&#39;属性必须是对象类型

  

@property(nonatomic,strong,readonly)dispatch_queue_t methodQueue;

所以我正在寻找entry(ies)放在.gyp文件部分&#34; xcode_settings&#34;让这个错误消失。

任何帮助表示感谢。

编辑:这是一个Objective-C ++文件。

编辑2 :我已设法将-x objective-c++添加到命令行,但错误仍然存​​在:(

编辑3 :此问题的解决方案是编辑node-gyp common.gypi文件以评论/删除以下xcode.settings:

     'MACOSX_DEPLOYMENT_TARGET': '10.7',       # -mmacosx-version-min=10.7

如果您已在全球范围内安装它,则可能位于/users/username/.node-gyp/node-version/include/node

用适当的值替换username和node-version。

我希望这个问题保持开放,建议更好的选择否定此设置。

0 个答案:

没有答案