如何使用终端在 Ubuntu 中编译/构建和运行 Objective-C 程序?

Cas*_*sey 8 objective-c software-installation

所以这里我有 Objective-C 的基本“hello world”脚本,我的笔记本电脑上有 Ubuntu,我想使用 Ubuntu 开始编译基本的想法、额外的类或任何值得为我当前的任何项目编码的东西,这样我就可以随时随地编写代码,而不必总是在我的 iMac 上。

你好世界

现在我唯一的问题是如何在终端中构建和运行此代码?显然这不是那么重要,因为我正在为 iOS 和 OSX 编码,所以唯一会显示的代码是不调用 SDK 或 Cocoa 脚本的任何代码,所以基本上它应该只显示基本的文本命令,例如“NSLog”或不管怎样,你得到了我想要做的,这就是我想要的。这样我至少可以检查小错误。

我环顾四周,发现了一些对默认 shell 脚本的帮助,例如根据我的理解调用 gcc 目录或类似的东西。我已经为位于我的文档中的 Objective-C 项目创建了我自己的文件夹,我不知道这是否会影响我使用我尝试过的终端命令运行文件的能力,但万一我存储了项目:

Home>文档>Objective-C>helloworld.m

同样在运行命令行时:

gcc -o helloworld.m
Run Code Online (Sandbox Code Playgroud)

或这个

gcc -I/home/caseyerdmann/Documents/Objective-C/helloworld.m
Run Code Online (Sandbox Code Playgroud)

或该命令行的任何版本我收到此错误:

gcc: fatal error: no input files
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

我相信我已经安装了所有的编译器文件,但我不反对完整的教程,无论它运行什么。现在澄清并收集视觉帮助,让你们尝试帮助我更好地我的文本文件位于我的文档中:

文件目录

您可以直观地看到它所在的目录。现在,当我运行上面在终端中尝试过的任何命令时,它会产生以下结果:

终端

我使用哪个命令并不重要,它总是那样。我希望这对我的情况有更多帮助。我不反对完整的教程,也不反对将我的文件保存在其他地方或以任何方式进行任何其他更改,事实上,我将不胜感激!我只是想让这个运行。

我做了一些研究并注意到这方面的答案已经为我提供了运行 GNUstep 库中的 hello.m 脚本的帮助,这不是我想要做的。但是,因为我无法运行默认脚本,所以我想我可能还有另一个问题,我将继续研究是否可以运行该脚本,同时感谢您的帮助!

更新: 我尝试了一个新命令并产生了一个新结果,尽管它在编译时也不成功,我认为这可能有助于回答其他人来回答这个问题。这是我尝试过的:

gcc -o helloworld.m -lobjc
Run Code Online (Sandbox Code Playgroud)

结果如下:

/usr/lib/gcc/x86_64-linux-gnu/4.6/../../../x86_64-linux-gnu/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

小智 7

在 Ubuntu 14.04 LTS 中,继续安装 GNU Objective-c 编译器:

sudo apt-get install gobjc  
Run Code Online (Sandbox Code Playgroud)

验证版本:

gcc --version
Run Code Online (Sandbox Code Playgroud)

必须这样说:

gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
....
Run Code Online (Sandbox Code Playgroud)

安装 GNUStep 开发库(相当于 macosx 上的 Cocoa):

sudo apt-get install gnustep-devel
Run Code Online (Sandbox Code Playgroud)

它应该工作和编译:

gcc HelloWorld.m `gnustep-config --objc-flags` `gnustep-config --base-libs` -o HelloWorld
Run Code Online (Sandbox Code Playgroud)

你应该运行:

./HelloWorld
Run Code Online (Sandbox Code Playgroud)


Cas*_*sey 4

我做了一些研究并找到了目前有效的解决方案。我可能会发布一个新问题,看看是否有办法缩短这个时间。但这成功编译了我的代码。感谢所有提供帮助的人,我确实学到了一些新东西。

gcc -o hello hello.m \
    -I `gnustep-config --variable=GNUSTEP_SYSTEM_HEADERS` \
    -L `gnustep-config --variable=GNUSTEP_SYSTEM_LIBRARIES` \
    -lgnustep-base -fconstant-string-class=NSConstantString \
    -D_NATIVE_OBJC_EXCEPTIONS
Run Code Online (Sandbox Code Playgroud)