典型的网站案例,中国购物平台,微网站 备案,开网店怎么开 新手无货源注意: 本文内容于 2025-07-20 01:58:56 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:大白编译——autotools与cmake。感谢您的关注与支持!
之前记录了通过autotools编译rpm包与deb包的步骤。参考小白编译——rpm包与deb包 - …注意: 本文内容于 2025-07-20 01:58:56 创建,可能不会在此平台上进行更新。如果您希望查看最新版本或更多相关内容,请访问原文地址:大白编译——autotools与cmake。感谢您的关注与支持!
之前记录了通过autotools编译rpm包与deb包的步骤。参考小白编译——rpm包与deb包 - 言成言成啊
一、跨平台编译
1.1 背景
本节参考 Autotools Tutorial Using GNU Autotools:强烈建议亲自阅读一遍,可以借助AI学习 1.1.1 跨平台困扰
在C中,头文件(.h)只负责“声明”,具体的实现放到**“库文件"里。不同系统"库文件”**示例如下 静态库 Linux: libc.a Windows: format.lib 动态库 Linux: libc.so Windows: msvcrt.dll C语言跨平台时不兼容的主要来源 函数不存在 如 strtod(),为C标准库函数,但是老版libc根本没有对应实现 函数有不同的名字 strchr() vs index(),strchr()为C标准库函数,但是在老版libc只有index(),两者作用相同。 原型差异 老系统只有int setpgrp(void) ,新系统只有 int setpgrp(int,int)。 行为差异 malloc(0) 返回值不确定。 所在库不同 pow()的实现可能在 libm.so 或 libc.so。 头文件差异 历史原因,有些系统会针对头文件进行补充,导致其他平台没有。 1.1.2 解决办法
如何实现一个可移植的软件包?让同一份源代码能在不同系统上无修改地编译、运行。
三种应对办法 大量 #if/#else → 代码凌乱,不推荐。 替换宏(#define fseeko ...)→ 推荐。 替换函数(提供缺失函数的兼容实现)→ 推荐。 替换宏示例,来自 coreutils-5.2.1 的 system.h。