我创建了一个具有 native 组件的软件,因此需要创建特定于操作系统的共享库(.dylib
、.dll
和 .so
)。我有一台 Mac OSX,并且我已经创建了一个与 Mac OSX 机器兼容的软件版本。我需要发布与其他操作系统兼容的版本。我可以直接在我的 mac 终端上写:
gcc -o c_prog.dll -shared c_prog.c
和
gcc -o libc_prog.so -shared c_prog.c
或者我是否必须在各自的操作系统上创建 .so
和 .dll
文件?
最佳答案
您的建议是不可能的。你的编译器可以为一个特定的目标平台创建代码,由“主机三元组”指定,例如在我的 linux 机器上:
> gcc -dumpmachine
x86_64-linux-gnu
主机三元组$(machine)-$(vendor)-$(operatingsystem)的含义
。
GCC(可能还有一些其他编译器)可以构建为交叉编译器。这是一个编译器,其目标主机三元组与其运行的机器不同。对于我的系统 (Debian Linux),有一个现成的 GCC 包用于编译 windows 64 位二进制文件:gcc-mingw-w64-x86-64
。所以理论上,你可以在你的系统上构建任何东西。但不要忘记您需要目标平台的头文件、匹配的 binutils
(用于打包共享库)以及目标平台的链接器和标准 C 库。所有这些都称为交叉工具链。
现在您可以四处寻找一个交叉工具链来在您的 Mac 上针对 Linux 和 Windows。也许你会发现一些有用的东西。或者,您可以尝试通过 gcc、glibc 和 binutils 源代码自行编译您的交叉工具。
最后,我求助于使用 真正的 Windows 虚拟机来构建我在 Linux 上开发的适用于 Windows 的软件。这要容易得多:)
关于c - 是否可以在 Mac OSX 上创建 Window 或 Linux 可用的 native 库(DLL 和 SO)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31254731/