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)
这些错误如何解决?
谢谢@EricS。有没有方法单独编译main.o和try.o,然后将它们组合成一个可执行文件,如我的问题所示? – Pony
gcc -o try.o -c try.m; gcc -o main.o -c main.c; gcc main.o try.o -framework基金会 – EricS
它的工作。谢谢@EricS – Pony