发布于 ,更新于 

Linux 安装 Objective-C 编译与运行环境

一般需要做 Objective-C 语言的开发和学习,都需要使用一套苹果电脑,可以是 MAC 台式机或者 MacBook,也可以在淘宝上面淘一台黑苹果,或者自己组装折腾一台黑苹果来用。

如果暂时还没有买 MAC 电脑,又打算感受一下 Objective-C 语言的骚,可以在Linux下搭建其编译和运行环境。下面以 Ubuntu 18.04 作为例子进行说明。Windows 10可以在 WSL 下运行整个 Ubuntu 18.04 达到同样效果。

首先更新apt:

1
sudo apt-get update

更新已有软件包:

1
sudo apt-get upgrade

安装 gcc,因为 Objective-C 依赖于 gcc :

1
2
3
# 安装 gcc 的 C 和 C++ 编译器
sudo apt-get install gcc
sudo apt-get install g++

安装 gcc 中的 Objective-C 编译器:

1
sudo apt-get install gobjc

安装 GNUstep 运行环境:

1
sudo apt-get install gnustep

安装 GNUstep 开发库:

1
sudo apt-get install gnustep-devel

安装 GNUstep 的 Makefile 依赖:

1
sudo apt-get install gnustep-make

编辑并保存以下 Objective-C 的 Hello World 样例,文件名为 hello1.m

1
2
3
4
5
6
7
#import <Foundation/Foundation.h>

int main(void)
{
NSLog(@"Hello, world!");
return (0);
}

执行以下命令进行编译:

1
gcc `gnustep-config --objc-flags` -o hello1 hello1.m

报错了,信息如下:

1
2
3
4
5
6
7
8
hello1.m: In function ‘main’:

/tmp/ccuU7quf.o: In function `main':
/mnt/c/test/objc/hello1.m:5: undefined reference to `NSLog'
/tmp/ccuU7quf.o: In function `__objc_gnu_init':
/mnt/c/test/objc/hello1.m:6: undefined reference to `__objc_exec_class'
/tmp/ccuU7quf.o:(.data.rel+0x0): undefined reference to `__objc_class_name_NSConstantString'
collect2: error: ld returned 1 exit status

这是因为没有连接上 libobjc 库和 libgnustep-base 库导致,把编译命令更改为:

1
2
gcc `gnustep-config --objc-flags` -o hello1 hello1.m \
/usr/lib/x86_64-linux-gnu/libobjc.so.4 /usr/lib/libgnustep-base.so

编译通过啦,可以直接运行:

1
2
3
4
./hello1

# 这里省去了很多初始化的LOG
2020-07-25 16:53:58.830 hello1[6624:6624] Hello, world!