2016-03-28 29 views
0

感謝您檢查問題。有一個叫try.m一個對象C的文件,我把它complie到目標文件try.o使用以下命令:在osx中​​將對象c(.m)文件編譯爲目標文件(.o)

gcc -c try.m -o try.o -framework Foundation 

的try.h是

int print_word(void); 

的try.m是:

#include "try.h" 
#import <Foundation/Foundation.h> 

int print_word(void) 
{ 
    NSLog (@"say hello"); 
    return 0; 
} 

Additionly,有一個的main.c文件,該文件包含main()函數,它看起來:

#include <stdio.h> 
#include "try.h" 

int main() 
{ 
    printf("This is main\n"); 
} 

我編譯main.c中通過以下命令來main.o:

gcc -o main.o -c main.c 

然後,我鏈接main.o和try.o以形成可執行文件主要:

gcc -o main main.o try.o 

在這些步驟之後,下面的錯誤發生: enter image description here

的錯誤是:

Undefined symbols for architecture x86_64: 
"_NSLog", referenced from: 
    _print_word in try.o 
ld: symbol(s) not found for architecture x86_64  
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

這些錯誤如何解決?

回答

1

您需要鏈接到Foundation框架。您可以在一個命令中完成所有操作:gcc main.c try.m -framework Foundation

+0

謝謝@EricS。有沒有方法單獨編譯main.o和try.o,然後將它們組合成一個可執行文件,如我的問題所示? – Pony

+0

gcc -o try.o -c try.m; gcc -o main.o -c main.c; gcc main.o try.o -framework基金會 – EricS

+0

它的工作。謝謝@EricS – Pony