【问题标题】:GCC 2.95.3:反斜杠和 CRLF 行终止符的编译错误
【发布时间】:2022-01-23 11:42:00
【问题描述】:

我有一个 Ubuntu 17.04 虚拟机。在这个 GCC 6.x 附带的操作系统上,我从官方存储库安装了 GCC 4.9,然后我编译了:

  • GCC 4.7.0 来自 GCC 4.9
  • GCC 3.0.4 来自 GCC 4.7.0
  • GCC 2.95.3 来自 GCC 3.0.4

现在,当我构建旧的 C 代码时,我在多行宏上收到此错误:

stray '\' in program

我编写了一个 Python 脚本,用于自动将行终止符从 Windows 一 (CRLF) 更改为 Linux 一。这样代码就编译好了。

有没有办法让 GCC 2.95.3 无需更改即可正确理解代码? AFAIK GCC 必须很好地理解差异

【问题讨论】:

  • 你为什么要使用这么旧版本的gcc?你能发布它抱怨的代码吗?如果可能,请尝试保留源中存在的 CR 和 LF。
  • "without changes" - 半有用:添加 make 规则以“编译”.cpp 代码到 .cppux: %.cpp : %.cppux 并在该用途中dos2unix 编译它。从那里开始,它应该是轻而易举的事。它与您的 python 脚本相同,但它通常已经存在于目标系统上。
  • 我将假设这段旧代码确实可以早早地编译。那么从那以后它是如何变化的呢?当您恢复代码时,它可能是一个添加换行符的 SCM 吗?也许可以将其配置为不添加或删除它们(例如可以使用git
  • @Lundin 我正在尝试使用这样一个旧版本的 GCC,因为我有一个内部带有 32 位动态重新编译器的代码。从原始源代码构建的原始二进制文件在新的 64 位机器上运行没有问题,但用更新的编译器构建的源代码不起作用。所以我试图理解为什么会出现这个问题。新编译器有些“错误”。 “错误”是指原始源代码是在考虑可用编译器的情况下编写的
  • @Francesco 我猜你已经错过了关于交叉编译的部分;)你需要的是 linux mingw build(基本上 GCC 运行在 linux 上,能够为 Windows 构建)。我知道 Debian 几年前曾经发布过这些软件包,但现在还不确定。

标签: c gcc newline


【解决方案1】:

我用我的 Python 脚本删除了所有 CRLF,代码编译正常,没有任何错误

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多