如何在代码块中编译Objective-C?

时间:2018-11-11 05:25:47

标签: objective-c gcc codeblocks

我下载了与GCC from here捆绑在一起的代码块

C部分运行正常

我读过这个wiki tutorial,它说拥有GCC将使我可以通过仅向编译器选项中添加-lobjc来编译目标C

但是,我已按照本教程中提到的步骤进行操作,并添加了-lobjc选项,但该选项无法编译

enter image description here

这是我在代码块中看到的构建错误消息:

-------------- Build: Debug in test_prog_proj (compiler: GNU GCC Obj-C Compiler)---------------

mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o
mingw32-gcc.exe: error: CreateProcess: No such file or directory
Process terminated with status 1 (0 minute(s), 2 second(s))
1 error(s), 0 warning(s) (0 minute(s), 2 second(s))

如上所示,它不显示-lobjc选项

我还尝试通过进入包含.m文件的文件夹在Windows cmd中手动编译上述程序。我给出了以下命令:

mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o -lobjc 

但是我在cmd中遇到了同样的错误

mingw32-gcc.exe: error: CreateProcess: No such file or directory  

我也尝试过

gcc -g -fgnu-runtime -O -c some_class.m  

我得到了from here,但这给了我同样的CreateProcess错误。如何开始在Windows中(最好使用GCC和代码块)编译Objective C代码?

---编辑1 ---

我按照下面的suggested in Mike Kinghan's answer进行操作,并卸载了较旧的Codeblock集成,然后分别重新安装了MinGW和Codeblock。 Codeblocks卸载删除了Program Files中的Codeblocks文件夹,但是当我再次重新安装Codeblocks(没有将MinGW捆绑在一起的版本)时,我在上一次安装中所做的“ GNU GCC Obj-C”设置仍然存在,并且带有-lobjc标志在“链接器设置”标签中。

但是,问题在于它仍然无法正常工作。如果我尝试从Codeblocks进行构建,则会收到以下错误

Goto "Settings->Compiler...->Global compiler settings->GNU GCC Obj-C Compiler->Toolchain executables" and fix the compiler's setup.

Tried to run compiler executable 'C:\Program Files\CodeBlocks\MinGW/bin/mingw32-gcc.exe', but failed!

Skipping... Nothing to be done (all items are up-to-date).  

Toolchains executable如下所示:

enter image description here

如果我尝试通过使用.m文件进入文件夹并发出命令

从cmd进行编译,
mingw32-gcc.exe -Wall -g  -c D:\backup\cb_files\objc_files\test_prog_proj\test_prog.m -o obj\Debug\test_prog.o -lobjc  

显示错误

mingw32-gcc.exe: error: CreateProcess: No such file or directory    

这是什么问题?

---编辑2 ---

按照Mike Kinghan的回答,我在编译器列表中删除了“ GNU GCC Obj-C编译器”的旧实例,并使用“ GNU GCC编译器”的当前版本进行了重新创建

但是,该程序仍然无法运行。这是我在构建日志中得到的消息:

-------------- Build: Debug in test_prog_proj (compiler: GNU GCC Obj-C Compiler)---------------

Linking stage skipped (build target has no object files to link)
Nothing to be done (all items are up-to-date).  

清理项目,然后再次构建它,将得到相同的消息。无论如何,尝试运行该项目都会给我一个对话框,提示该项目尚未构建,然后单击“是”来构建该项目,只是再次弹出相同的“尚未构建的项目”对话框。 “项目”选项卡的“工作区”树中的文件图标似乎也显示为灰色:

enter image description here

这是可执行工具链的外观:

enter image description here

我也在链接器设置中将-lobjc也添加为mentioned here

我右键单击“项目”树中的项目图标,转到“构建选项”,并在“链接器设置”中也添加了-lobjc:

enter image description here

此项目目前有什么问题?

---编辑3 ---

我最终完全卸载了Codeblock(从Windows的“开始”菜单中卸载,删除了%APPDATA%中的codeblocks文件夹),卸载了MinGW(删除了c:\ MinGW文件夹),然后重新安装了所有内容。我按照the Wiki中的所有说明进行操作(Troubleshooting部分除外,但我认为该部分无关紧要),但仍然不起作用(与 Edit 2 中描述的问题相同) >在本文中)。

如何获取代码块来检测和编译obj-C代码?另外,当我尝试从Codeblocks界面构建编译器命令行参数时,它没有显示。为什么会这样,如何获得显示的完整命令行信息?

1 个答案:

答案 0 :(得分:2)

我们将GCC程序宽松地称为“编译器”-[mingw32-](gcc|g++)- 实际上是一个调用 real 语言的编译器/链接器前端 编译器和/或链接器,具体取决于输入文件和命令行选项 表示您要执行此操作。

扩展名为.m的输入文件表示它们是Objective C源文件 将使用GNU Objective C编译器cc1obj进行编译。但是你 还没有因此,您会看到失败。

GCC安装将包括C编译器cc1,以及可选的编译器 对于其他语言-C ++,Fortran,Objective(C | C ++),Go ...您说您的MinGW GCC安装为 与Code :: Blocks捆绑在一起。捆绑在一起的MinGW省略了Objective C编译器cc1obj,因为维护者 认为这是一种利基语言。

最好删除CB安装和捆绑的MinGW,然后从以下位置独立安装MinGW GCC 竞争项目之一:-

https://sourceforge.net/projects/mingw-w64/
https://sourceforge.net/projects/mingw/

运行安装程序,并确保您获得Objective C以及任何其他编译器 想要。

然后,用codeblocks-17.12-setup.exe安装程序(不是 codeblocks-17.12mingw-setup.exe)替换您的CB安装, 来自https://sourceforge.net/projects/codeblocks/files/Binaries/17.12/Windows/。此安装程序包括 no 编译器和 将自动检测您的MinGW安装。

然后像在CB IDE中创建GNU GCC Obj-C编译器设置一样进行操作。

稍后...仍然无法正常工作

您的 GNU GCC Obj-C 编译器设置与以前的版本相同 CB安装,并且由于您的 新的MinGW安装不再是Code :: Blocks的一部分。如你所见, 仍会在C:\Program Files\Codeblocks\MinGW中寻找工具链可执行文件, 而您的新MinGW在其他地方。

当您重新安装Code :: Blocks时,您应该已经看到了它自动检测编译器的尝试, 并且它在C:\MinGW中检测到您的MinGW工具链。它将已经配置 GNU GCC编译器的编译器设置,并以正确的路径 工具链可执行文件。但是它不会修改任何持久的编译器设置, 您创建了自己,例如 GNU GCC Obj-C

首先检查自动检测到的设置 GNU GCC编译器是否正确 通过创建“ Hello world” C控制台项目并看到可以构建它。 我认为您可以,但如果不能,请进入 GNU GCC编译器设置 自己,并手动正确设置编译器的安装目录

然后,为您的 GNU GCC Obj-C 设置相同的编译器安装目录。 编译器设置。