我已经分享了给我的代码,这些代码可以在一个 linux 系统上编译,但不能在较新的系统上编译。错误是 uint32_t 未命名类型。我意识到这通常可以通过包含<cstdint>or 来解决stdint.h。源代码没有这些包括,我试图寻找一个不需要修改的选项,因为我无法控制的内部业务实践。由于它在一台机器上按原样编译,因此他们不希望更改源代码。
我不确定这是否重要,但较旧的系统使用 gcc 4.1,而较新的系统使用 gcc 4.4。如果需要,我可以安装不同版本的 gcc,或者在较新的机器上添加/安装库/包含文件,我可以完全控制那台机器上的内容。
在不修改源代码的情况下尝试在我的机器上编译此代码有哪些选择?如果需要,我可以提供其他详细信息。
我不确定这是否重要,但旧系统使用 gcc 4.1,而新系统使用 gcc 4.4
GCC<stdint.h>不久前就停止了纳入。你现在必须包含一些东西才能得到它......
我意识到这通常可以通过包含
<cstdint>或 来解决stdint.h。源代码不包含这些内容,我正在尝试寻找一个不需要因我无法控制的内部业务实践而进行修改的选项......
我希望我没有吹毛求疵……如果你不能修改源文件,那么你可以修改构建系统或配置文件吗?还是环境?如果是这样,您可以使用强制包含来插入文件。请参阅使用命令行选项包含头文件?
您可以修改Makefile以强制包含stdint.h. 如果构建系统支持CFLAGS或CXXFLAGS,那么您可以强制将其包含在标志中。你最后的选择可能是做一些像export这样的事情CC="gcc -include stdint.h"。
我之所以吹毛求疵的是 OpenSSL 和 FIPS。FIPS 对象模块的 OpenSSL 源文件被隔离且无法修改。我们必须回退到修改支持脚本和环境,以使某些事情按预期工作。