- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我下载了与 GCC 捆绑在一起的 Codeblocks from here
C部分运行良好
我读了这个wiki tutorial它说拥有 GCC 将允许我通过将 -lobjc 添加到编译器选项来编译 Objective-C
但是,我按照本教程中提到的步骤添加了-lobjc选项,但它没有编译
这是我在代码块中得到的构建错误消息:
-------------- 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).
这是工具链可执行文件
的样子:
如果我尝试通过进入包含 .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 树中的文件图标似乎也变灰了:
这是工具链可执行文件的样子:
我在链接器设置中添加了-lobjc
mentioned here以及。
我右键单击了项目树中的项目图标,转到构建选项并在链接器设置中添加了 -lobjc:
目前这个项目有什么问题?
--- 编辑 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/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!