【问题标题】:GNUstep - fatal error: 'objc/objc.h' file not found on Ubuntu 20.04GNUstep - 致命错误:在 Ubuntu 20.04 上找不到“objc/objc.h”文件
【发布时间】:2020-07-31 12:49:51
【问题描述】:

我有以下问题:

我在 Ubuntu 20.04 上,我正在尝试设置 GNUstep,这是我想要构建的某些源二进制文件所必需的

(为了完整起见,我要构建的程序称为Advanced Rendering Toollḱit,信息可以在这里找到:https://cgg.mff.cuni.cz/ART/)。

使用 clang-9 编译器构建时,调用 ma​​ke 命令后,我收到以下错误消息:

致命错误:找不到“objc/objc.h”文件

我应该提一下,总的来说,我对 Linux 还是很陌生。我所做的是通过

安装GNUstep
sudo apt-get install gnustep gnustep-devel

按照网站上的建议 (http://wiki.gnustep.org/index.php/GNUstep_under_Ubuntu_Linux)。它导致收到上述错误。

/usr/include/GNUstep/Foundation/Foundation.h:31:9:致命错误:找不到'objc/objc.h'文件

接下来我尝试从同一网页下载提供的配置脚本并执行它们。当我这样做时,我收到了以下反馈:

检查 objc 是否真的有效……不。我似乎无法使用您的 Objective-C 编译器来生成 工作二进制文件!请检查您的 Objective-C 编译器安装。 如果您使用 gcc-3.x,请确保您的编译器的 libgcc_s 和 libobjc 可以通过动态链接器找到 - 通常需要您玩 使用 LD_LIBRARY_PATH 或 /etc/ld.so.conf。 请参阅您的编译器安装说明以获得更多帮助。 配置:错误:Objective-C 编译器不工作或未正确安装。

也许我弄错了,但是,我安装 GNUstep 的全部目的是让 Objective-C 编程在非 Apple 机器上成为可能。因此我不明白为什么它抱怨一个非工作的Objective-C编译器(顺便说一下,当我使用 gccg++ 作为编译器)。

我确实做了一些研究,发现了一些 StackOverflow 帖子,建议我安装 libobjc2,但我怀疑这在 Ubuntu 20.04 中会被贬值。

老实说,我不知道出了什么问题,我非常感谢您朝着正确的方向前进!非常感谢您帮助我!

【问题讨论】:

  • 问题似乎是编译器的错误提示。如果您只是对非 Apple 中的 Objective-C 感兴趣,那么请查看 ObjFW ... GNUstep 是一个非常难以设置和开始工作的程序。但是这两个(GNUstep 和 ObjFW)都比 Apple FWIW 的替代品更具学术性。
  • 在 Arch Linux 上,你需要 gcc-objc,所以我认为像 sudo apt-get install gcc-objc 这样的东西可以在你的环境中工作?
  • 嗨@skaak,非常感谢您的意见。 Ubuntu 上似乎有一个名为“gobjc”的软件包。 “gobjc++”。我都安装了,又累了,错误仍然存​​在。 (背景:我想要构建的工具是用于研究,它主要是在 Apple 机器上开发的,这就是为什么 GNUstep 是一个依赖项。它用于我的大学论文。购买 Apple 计算机或 hackintosh 并不是真正的选择我...所以是 GNUstep :)。虽然,作为一个初学者,它让我很忙)
  • 嗨 - 是的,我看过那个工具。一两年前的 FWIW,我让 Objective-C 在 Arch 上工作没问题,但我永远无法编译 GNUstep。我只是想尝试一下,ObjFW 对此非常好,但我想它对于你想要的东西并不值得。无论如何,如果我所做的有帮助的话,那就是让 Objective-C 在 Linux 下运行并不难。我让 gnu 和 llvm 都能轻松工作,但没有做笔记,只使用了标准的 Arch 包。我认为只需确保您已在 Linux 中正确安装了完整的开发环境,然后再试一次。
  • FWIW 我刚刚编译好了。刚刚将 ART 下载到我的 Arch Linux 中......必须安装 cmake 并在安装根目录中运行 cmake CMakeLists.txtmake

标签: objective-c linux ubuntu gnustep


【解决方案1】:

虽然我无法确定我的问题到底是什么,但我得到了一些外部帮助,我们一起想出了一个对我有用的解决方案。 出于调试目的,我们在我的 Ubuntu 环境中创建了一个测试用户帐户并重复了整个过程。它完美无缺。 我们得出的结论是,我的用户帐户在本地一定有问题。我确信我的环境变量有问题,尽管我未能清楚地识别错误(我是 Linux 初学者)。我选择了简单的方法,备份了重要文件,删除并重新创建了我的 root 用户帐户,然后它就可以工作了。我希望,这可以帮助任何其他有同样问题的人。 @skaak,感谢您的帮助和建议!

【讨论】:

  • 太好了,我自己可以通过从源代码编译来安装它,如下所述:wiki.gnustep.org/index.php/…
  • @MathNerd 谢谢,我也访问了那个页面。我记得我按照说明遇到了一些问题,但我不记得它们是什么。总的来说,我对 Linux/Unix 还是很陌生 :)
【解决方案2】:

正如人们所指出的,如果你想在 Ubuntu 中使用 clang 编译目标 C 程序,你必须安装 libobjc2(主流项目 here),但它目前没有在 Ubuntu 中打包。正如您所发现的,可能有一个名称相同或相似的包,但那是另一回事。此手动安装对我有用:

wget https://github.com/gnustep/libobjc2/archive/v2.0.tar.gz
tar xvzf v2.0.tar.gz
cd libobjc2-2.0
mkdir build
cd build
export CC=`which clang`
export CXX=`which clang++`
cmake ..
make
sudo make install

【讨论】:

  • 非常感谢您的意见。对我来说,事情现在清楚多了。祝你有美好的一天:)
猜你喜欢
  • 1970-01-01
  • 2021-01-31
  • 2020-08-07
  • 2021-07-31
  • 2020-11-05
  • 2022-12-15
  • 2020-08-15
  • 2020-11-27
  • 2020-10-02
相关资源
最近更新 更多