2016-12-02 70 views
0

我想使用命令行編譯器在MAC OSX上編譯和鏈接來自命令行的應用程序。我有一個名爲 「hello.m」 源文件如下:要使用NSLog鏈接哪個OSX庫(命令行)?

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

在命令提示符下,I型:

$ 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時,我需要鏈接一個庫。我需要鏈接哪個庫?

+0

您是否嘗試在clang命令中添加'-framework Foundation'? – Lukas

回答

0

您需要鏈接到的圖書館是'基金會'。這是您在文件頂部導入的框架。如果這是在Xcode中,它通過項目設置/自動化框架檢測爲您設置框架鏈接。當直接使用clang時,您需要通過-framework標誌正確鏈接到它們。

clang -framework Foundation -o hello hello.m 
+0

好吧,「框架基金會」到底做了什麼?它是否與一整套圖書館鏈接?是否沒有可以在命令行中指定的單個「.a」庫? – deltamind106

+0

在封面之下,框架是一個包含動態庫(在某些情況下爲靜態庫)和一些資源的包。 https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WhatAreFrameworks.html。所以 - 框架是告訴它鏈接到框架中包含的'基礎'庫的一種方式 – bobDevil