【问题标题】:Resolve TCC warnings on macOS解决 macOS 上的 TCC 警告
【发布时间】:2018-03-27 09:30:35
【问题描述】:

我正在寻找一个 C 解释器来使用,同时制作一个简单的 C 实用程序以避免一直编译。我按照here 的建议安装了 TCC,但我收到了警告和错误。如何正确运行 TCC?

$ tcc -run hello.c
.../usr/include/sys/cdefs.h:81: warning: #warning "Unsupported compiler detected"
#if !defined(__GNUC__) || __GNUC__ < 4
#warning "Unsupported compiler detected"
#endif

设置__GNUC__ 稍后会导致错误:

tcc -D__GNUC__=4 -run hello.c
.../usr/include/i386/_types.h:98: error: ';' expected (got "__darwin_va_list")
#if (__GNUC__ > 2)
typedef __builtin_va_list   __darwin_va_list;   /* va_list */
#else
typedef void *          __darwin_va_list;   /* va_list */
#endif

我的环境:

~$ gcc --version
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0

如果TCC不适合macOS,请推荐一个很好玩的C解释器。

【问题讨论】:

标签: c interpreter tcc


【解决方案1】:

肯定可以使用的是 CERN 的 Cling 或任何其他基于 LLVM/Clang,因为这是 Apple 在 macOS 中使用的。

【讨论】:

  • 巨大的下载量,压倒性的--help 和非常技术性的文档。不容易进入...
  • @forthrin:如果您需要基于 LLVM/Clang 的最小解决方案,您还可以创建自己的微型解释器:请参阅 github.com/llvm-mirror/clang/tree/master/examples/… 但是,我猜您更喜欢现成的东西,这就是为什么我建议紧贴。
【解决方案2】:

您的第一条消息抱怨的行上方的块评论是

/* This SDK is designed to work with clang and specific versions of
 * gcc >= 4.0 with Apple's patch sets */
#if !defined(__GNUC__) || __GNUC__ < 4
#warning "Unsupported compiler detected"
#endif

这很清楚 - 你确实需要 gcc 或 clang。幸运的是,这两个编译器都非常易于安装 - 使用 https://www.macports.org。

我不会为 C 解释器而烦恼 - 它不是解释语言。

【讨论】:

  • MacOS 自带 GCC/clang 开箱即用(更新原帖)。不自动识别是不是 TCC 的缺点?
  • Clang、gcc 和 tcc 都是不同的编译器。问题是 tcc 尝试使用与 OS 捆绑的标准库,这与 tcc 不兼容。
  • 好吧,实际上通过使用-run 我的(简单)C 代码确实解释,所以我可以删除警告,看看我能走多远。
  • @forthrin 显然你不知道 compiled 和 interpreted 之间的区别。 TCC 这个名字来自"Tiny C Compiler"。它是编译器,而不是解释器。 -run 命令行选项告诉它启动编译的程序执行(如果编译成功)。
  • 我明白了!我确实知道其中的区别,但显然我误读了似乎将其称为口译员的参考文章。好吧,如果没有(轻量级!)“C 解释器”之类的东西,那么我还不如留在 GCC。
【解决方案3】:

首先,tcc 不是“解释器”,它是一个非常快速的编译器,可用于编译和运行您的 C 代码,就像它是脚本一样。

其次,“检测到不支持的编译器”警告就是这样,警告。我一直收到这个警告,我的代码仍然可以编译并且运行没有问题。如果警告困扰您,您可以简单地运行 tcc 和 -w 选项来抑制警告(可能仅在您重新运行您已经知道没有问题的文件时才可取)。

例如,如果您使用 tcc shebang 行将 C 代码作为脚本运行,则可以将其更改为此

#!/usr/local/bin/tcc -w -run

在 macOS 上运行 tcc 时可能会出现一些其他问题。主要是缺少包含文件。在 macOS 上,包含文件可能未安装到 /usr/include/。有关修复,请参阅此 question。一旦 Xcode 正确安装了标头,我仍然需要更新我的环境变量以获取 tcc 来找到它们。

 export C_INCLUDE_PATH="/usr/include:$C_INCLUDE_PATH"

您可以通过运行tcc -vv 来查看tcc 在哪里寻找标头。

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2022-08-09
    • 2020-08-05
    • 1970-01-01
    • 2012-06-14
    相关资源
    最近更新 更多