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