【发布时间】: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 几年前曾经发布过这些软件包,但现在还不确定。