OSX 10.8上-stdlib = libc ++的部署目标无效

Mas*_*iar 5 c++ macos flags xcodebuild node-gyp

我正在通过node-gyp用C++ 编写的Node.JS包进行编译.当我编译它时,我收到以下错误:clang: error: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later).我在OSX 10.8上运行,我已经安装了XCode命令行工具.这是node-gyp用来编译包的文件:

{
  "targets": [
    {
      "target_name": "package_name",

      'type': 'executable',

      'xcode_settings': {
        'OTHER_CFLAGS': [
          "-std=c++11",
          "-stdlib=libc++"
        ],
      },

      "sources": [ "package_src.cpp" ],
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

基本上它指定了编译的目标,类型和标志,以及源.

关于如何解决这个问题的任何想法?

use*_*027 8

虽然你有OS X 10.8 clang将尝试构建它,以便它也可以在其他较旧的OS X版本上运行.现在,由于-stdlib=libc++需要最低版本10.7,否则它将无法编译它,除非您通过指定明确告诉它将使用10.7(或更高版本)作为部署目标

'MACOSX_DEPLOYMENT_TARGET': '10.7'
Run Code Online (Sandbox Code Playgroud)

在里面xcode_settings.

在您的情况下,完整设置应如下所示:

{
  "targets": [
    {
      "target_name": "package_name",

      'type': 'executable',

      'xcode_settings': {
        'MACOSX_DEPLOYMENT_TARGET': '10.7',

        'OTHER_CFLAGS': [
          "-std=c++11",
          "-stdlib=libc++"
        ],
      },

      "sources": [ "package_src.cpp" ],
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)


Mas*_*iar 2

我不知道什么对你有用,@drewish,但这就是我让它工作的方法:

{
  "targets": [
    {
      "target_name": "package_name",

      'type': 'executable',

      'xcode_settings': {
        'OTHER_CFLAGS': [
          "-std=c++11",
      "-stdlib=libc++",
      "-mmacosx-version-min=10.7"
        ],
      },

      "sources": [ "overcpu.cpp" ],
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

  • 我可以知道这个文件的位置吗? (4认同)