c - 如何在 Windows 上交叉编译 C 代码以使二进制文件也能在 Unix (Solaris/HPUX/Linux) 上运行?

标签 c windows unix cross-platform cross-compiling

我一直在调查 Cygwin/Mingw/lcc我喜欢能够在我的 Windows 上(最好是在 cygwin 下)编译 perl native C 扩展,然后在 Solaris 和 HP unix 上运行它们而无需任何进一步的麻烦,这可能吗?

这一切都源于我原来的 perl 跨平台问题 here .

最佳答案

(这是一个非常古老的问题,但缺少一些有用的信息 -- 我亲自为 Solaris(SPARC 和 x86)、AIX、HP-UX 和 Linux(x86、x64)完成了此操作。)

  • 交叉编译 C++ 比直接使用 C 更难。

  • 不支持 HP-UX 32 位 PA-RISC,因为它使用 SOM 格式而不是 ELF,而 binutils 不(并且可能永远不会)支持 SOM。换句话说,您只能交叉编译 64 位 PA-RISC。 (需要 PA-RISC 2.0 芯片。)

  • 如果可以的话,我会选择 mingw 而不是 cygwin。 Cygwin 引入了许多令人头疼的文件权限问题和 cygwin1.dll 依赖项,这可能会很麻烦。但是,如果可能,请在 Linux 上构建。一切都会更快,因为您正在运行的所有工具和脚本都是为 execstat 是快速操作的环境而设计的。 Windows + NTFS 不是那种环境。

  • 从 crosstools 脚本开始,但要做好为此花费大量时间的准备。

  • 首先尝试使用最新的 gcc/binutuils,但如果您无法解决问题,请尝试回退到较旧的软件包。例如。 for Power3 (AIX) gcc 4.x 系列交叉编译器生成错误代码,3.x 没问题。

  • 复制 native 库和 header 时,请确保您是从可能运行的最旧机器上复制的。复制新的 libc 意味着您的代码将无法在具有旧 libc 的任何机器上运行。

  • 当复制 native 库和 header 时,您可能希望“tar -h”将符号链接(symbolic link)转换为实际文件,还要注意在 Solaris 上一些必需的 crt 对象文件埋在 cc 目录中,而不是在/usr/lib 下

关于c - 如何在 Windows 上交叉编译 C 代码以使二进制文件也能在 Unix (Solaris/HPUX/Linux) 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/579695/

相关文章:

c - 加载库需要随机化内存地址是什么?

c - 使用指针函数的参数太少

c++ - 以编程方式告诉 Windows XP 待机

linux - UNIX ptrace() 阻止 child 的系统调用

c - -> 使用 execv 运行 wc 命令

linux sftp :file transfer error

循环链表插入两个后只有一个元素

c - "BUG: scheduling while atomic: swapper/0x00000103/0, CPU#0"怎么解决?在 TSC2007 驱动程序中?

c - 从控制台应用程序显示系统资源使用情况

windows - 将 WSL 添加到 Windows 防火墙