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

标签 objective-c gcc codeblocks

我下载了与 GCC 捆绑在一起的 Codeblocks from here

C部分运行良好

我读了这个wiki tutorial它说拥有 GCC 将允许我通过将 -lobjc 添加到编译器选项来编译 Objective-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 中编译 Objective C 代码(最好使用 GCC 和 Codeblocks)?

--- 编辑 1 ---

我做了 suggested in Mike Kinghan's answer下面,并卸载了我的旧代码块安装,然后分别重新安装了 MinGW 和代码块。 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).  

这是工具链可执行文件的样子:

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).  

清理项目然后再次构建它会给出相同的消息。无论如何尝试运行该项目都会给我一个对话框,说明该项目尚未构建,然后单击是构建项目只会再次弹出相同的“项目尚未构建”对话框。 Projects 选项卡的 Workspace 树中的文件图标似乎也变灰了:

enter image description here

这是工具链可执行文件的样子:

enter image description here

我在链接器设置中添加了-lobjc mentioned here以及。

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

enter image description here

目前这个项目有什么问题?

--- 编辑 3 ---

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

如何获取 Codeblocks 来检测和编译 obj-C 代码?此外,当我尝试从 Codeblocks 界面构建它时,它没有向我显示编译器命令行参数。这是为什么,我怎样才能让它显示我正在使用的完整命令行?

最佳答案

我们粗略地称之为“编译器”的 GCC 程序 - [mingw32-](gcc|g++) - 实际上是调用真实语言的编译器/链接器前端 编译器和/或链接器取决于输入文件和命令行选项 表明你想要它做。

带有 .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 安装程序替换您的 CB 安装(不是 codeblocks-17.12mingw-setup.exe), 来自 https://sourceforge.net/projects/codeblocks/files/Binaries/17.12/Windows/。此安装程序不包含 编译器和 将自动检测您的 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 Compiler 设置编译器,并使用正确的路径 工具链可执行文件。但它不会修改任何持久的编译器设置 您自己创建的,例如 GNU GCC Obj-C

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

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

关于objective-c - 如何在代码块中编译 Objective-C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53246084/

相关文章:

c++ - 如何在不使用任何图形库的情况下在 C++ 中创建文本编辑器?

swift - Xcode 14 Xcode 13 不兼容

ios - 如何避免不得不一遍又一遍地重新创建对象?

ios - 如何在 CNContact 中更新/合并联系人

windows - 在 Windows 上使用 OpenSSL 编译 cUrl,缺少 -lcrypto 和 -lssl

将 GNU case 范围扩展转换为标准 C

c++ - CodeBlocks 未定义对 WinMain@16 的引用

ios - 收到自定义 collectionView 错误 : EXC_BAD_ACCESS code=2

gcc - 突出显示和过滤 (gcc) 编译器消息

c++ - 使用流运算符构建错误