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

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

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

你好世界.m

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

我四处查看,发现有几个关于默认 shell 脚本的帮助,以及调用 gcc 目录或类似的东西(据我所知)。我已经为位于文档中的 Objective-C 项目创建了自己的文件夹,我不知道这是否会影响我使用尝试过的终端命令运行文件的能力,但如果是的话,我将项目存储在:

主页>文档>Objective-C>helloworld.m

运行命令行时:

gcc -o helloworld.m

或这个

gcc -I/home/caseyerdmann/Documents/Objective-C/helloworld.m

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

gcc: fatal error: no input files
compilation terminated.

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

文件目錄

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

终端

无论我使用哪个命令,它总是那个。我希望这能为我的情况提供更多帮助。我并不反对完整的教程,也不反对将我的文件保存到其他地方或以任何方式进行任何其他更改,事实上,我会很感激!我只是很想让它运行起来。

我做了一些研究,发现这方面的答案已经为我提供了运行 GNUstep 库中的 hello.m 脚本的帮助,这不是我想要做的。但是因为我无法运行默认脚本,我想我可能还遇到了另一个问题,我将继续研究看看我是否能让该脚本运行,同时任何帮助都将不胜感激!

更新: 我尝试了一条新命令并得到了新的结果,尽管编译也失败了,但我认为它可能有助于回答其他人的问题。这是我尝试过的:

gcc -o helloworld.m -lobjc

结果如下:

/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

答案1

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

sudo apt-get install gobjc  

验证版本:

gcc --version

必须说类似这样的话:

gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2
....

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

sudo apt-get install gnustep-devel

它应该可以工作并编译:

gcc HelloWorld.m `gnustep-config --objc-flags` `gnustep-config --base-libs` -o HelloWorld

你应该运行:

./HelloWorld

答案2

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

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

答案3

您缺少可执行文件的名称。因此,命令应如下所示:

gcc -o hello helloworld.m

编译后,输入

./hello

-o hello指定编译源代码后要创建的输出文件的名称。(在本例中,输出文件名为hello。)这将创建一个可执行文件(名为hello),然后您可以直接从终端运行该文件。如果在编译时不使用-o选项,则可执行文件的名称将为a.out默认名称。现在要执行该程序,您需要输入

./hello

上述命令假设您已经位于源文件的位置,但源文件和目标输出文件也可以指定为目录。例如:

gcc -o ~/Projects/hello ~/Desktop/hello.c

将编译位于桌面上的 C 源文件并将可执行二进制文件放在Projects 主目录中的文件夹中。要运行此可执行文件,请键入;

./Projects/hello

或者您也可以先进入源文件所在的目录并运行上述命令。如果您与源文件位于同一目录中,则无需指定路径名。

我想知道为什么你的文件扩展名.m不是.c

答案4

gcc -o hello hello.m

如果安装了编译器,应该会生成 Objective C 可执行文件。如果没有,请安装它:

sudo apt-get install gobjc

相关内容