我在.mm文件中制作了一个非常简单的Objective-C/C程序,但我不知道如何链接Objective-C库/框架.我只需要Foundation框架.我怎样才能做到这一点?我不想在Xcode中这样做,因为Xcode总是创建一个包含项目文件的整个文件夹,然后将产品隐藏在一个难以找到的文件夹中,我觉得它是用于单文件程序的大量内存.
码:
#include <stdio.h>
#import <Foundation/Foundation.h>
NSString* charToNSString(char * c){
return [NSString stringWithUTF8String:c];
}
const char* NSStringToChar(NSString *str){
return [str UTF8String];
}
int main(int argc, char * argv[]){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译: gcc file.mm
输出:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_NSString", referenced from:
objc-class-ref in file-4bd3e4.o
"_objc_msgSend", referenced from:
charToNSString(char*) in file-4bd3e4.o
NSStringToChar(NSString*) in file-4bd3e4.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
$ gcc -framework Foundation main.mm
Run Code Online (Sandbox Code Playgroud)
虽然上面的命令工作得很好,但我建议你创建Makefile
$vim Makefile
Run Code Online (Sandbox Code Playgroud)
粘贴下面的内容
CC=gcc
FRAMEWORKS:= -framework Foundation
SOURCE=main.mm
OUT=-o main
all:
$(CC) $(SOURCE) $(FRAMEWORKS) $(OUT)
# ^ this is a tab not spaces, if you give spaces here it will through error :*** missing separator
Run Code Online (Sandbox Code Playgroud)
然后运行
$ make
Run Code Online (Sandbox Code Playgroud)
看看这个关于Makefile的简单教程