【问题标题】:Which OSX library to link against (command line) to use NSLog?要链接哪个 OSX 库(命令行)以使用 NSLog?
【发布时间】:2016-12-02 20:29:36
【问题描述】:

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

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

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

    $ clang -o hello hello.m

但是编译器返回:

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

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

【问题讨论】:

  • 您是否尝试在 clang 命令中添加-framework Foundation

标签: objective-c macos clang


【解决方案1】:

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

clang -framework Foundation -o hello hello.m

【讨论】:

  • 好的,那么“-framework Foundation”到底是做什么的呢?它是否链接到一整套库?没有一个我可以在命令行上指定的“.a”库吗?
  • 在幕后,框架是一个包含动态库(或在某些情况下为静态库)和资源的包。 developer.apple.com/library/content/documentation/MacOSX/…。所以 -framework 是告诉它链接到框架中包含的“基础”库的一种方式
猜你喜欢
  • 2012-12-10
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多