我需要帮助来解密特定 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
我再次删除了与问题无关的编译选项。
编译错误是:
错误:具有“保留(或强)”属性的属性必须是对象类型
@property (nonatomic, strong, readonly) dispatch_queue_t methodQueue;
因此,我正在寻找要放置在 .gyp 文件部分“xcode_settings”中的条目以消除此错误。
任何帮助表示赞赏。
编辑:它是一个 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
用适当的值替换用户名和节点版本。
我希望这个问题保持开放,以提出一个更好的选择来否定这个设置。