2016-03-28 80 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

相关问题