【问题标题】:Compile Objective-C with clang in macOS 10.14?在 macOS 10.14 中使用 clang 编译 Objective-C?
【发布时间】:2019-07-21 23:23:04
【问题描述】:

macOS:10.14.5

XCode:10.2.1

Clang:8.0.0

我能够使用 XCode 成功编译 Obj-C,但是在尝试从命令行编译时遇到了一个致命错误,即缺少 Foundation.h。有关如何解决此问题的任何想法?

$ cat first_program.m                                                                                        
#import <Foundation/Foundation.h>

int main(int argc, const char *argv[]) {
  @autoreleasepool {
      NSLog(@"Hello, World!");
  }
  return 0;
}

$ clang -Wall -framework Foundation first_program.m
first_program.m:1:9: fatal error: 'Foundation/Foundation.h' file not found
#import <Foundation/Foundation.h>
        ^~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.

$ clang -v                                                                                                  
clang version 8.0.0 (tags/RELEASE_800/final)
Target: x86_64-apple-darwin18.6.0
Thread model: posix
InstalledDir: /usr/local/opt/llvm/bin

【问题讨论】:

  • stackoverflow.com/a/15812786/341994 我认为你必须向它展示 Foundation 在哪里
  • 该尝试尚未成功,尝试过:/System/Library/Frameworks 和您示例中的路径。愚蠢的问题:如果找不到框架,如果您通过-framework Foundation,链接器不应该抛出错误吗?像ld: framework not found Foundation 这样的东西。如果我尝试clang -framework blah,这就是我看到的
  • 你有没有指向你的 Xcode 版本的命令行工具属性? OMM InstalledDir 在 Xcode 中。
  • 你的版本也很奇怪。我在 mac os 10.12,远远落后于你,而 Xcode 9.2,远远落后于你,但我的 clang 是 Apple LLVM 版本 9.0.0,它领先于你。所以你的clang对于你正在做的事情来说已经很老了。这让我觉得你完全忘记了安装当前的命令行工具。转到开发人员站点并安装它们,然后进入 Xcode Locations pref 窗格并确保它们指向您的 Xcode。

标签: objective-c macos clang


【解决方案1】:

我怀疑使用的版本 clang 似乎是非 Apple 标头,因此无法定位。您可以通过使用xcrun --show-sdk-path 选项将isysroot 添加到您的编译命令来告诉它在哪里寻找Foundation 框架:

clang -Wall -framework Foundation -isysroot `xcrun --show-sdk-path` first_program.m 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多