我一直在调查 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 上构建。一切都会更快,因为您正在运行的所有工具和脚本都是为
exec
和stat
是快速操作的环境而设计的。 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/