要链接哪个 OSX 库(命令行)以使用 NSLog?

del*_*106 6 macos objective-c clang

我想使用命令行编译器从 MAC OSX 上的命令行编译和链接应用程序。我有一个名为“hello.m”的源文件,如下所示:

    #import <Foundation/Foundation.h>
    int main(int argc,char *argv[])
    {
        NSLog(@"hello world\n");
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

在命令提示符下,我键入:

    $ clang -o hello hello.m
Run Code Online (Sandbox Code Playgroud)

但编译器返回:

    Undefined symbols for architecture x86_64:
      "_NSLog", referenced from:
          _main in main-74f615.o
    ld: symbol(s) not found for architecture x86_64
Run Code Online (Sandbox Code Playgroud)

显然,当我调用 NSLog 时,我需要链接到一个库。我需要链接哪个库?

bob*_*vil 7

您需要链接到的库是“基础”。这是您在文件顶部导入的框架。如果这是在 Xcode 中,它会通过项目设置/自动化框架检测为您设置框架链接。直接使用 clang 时,您需要传递-framework标志以正确链接到它们。

clang -framework Foundation -o hello hello.m
Run Code Online (Sandbox Code Playgroud)

  • 从本质上讲,框架是一个包含动态库(或在某些情况下是静态库)以及资源的包。https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html。所以 -framework 是告诉它链接到框架中包含的“Foundation”库的一种方式 (2认同)