是否可以在Mac OSX上创建Window或Linux可用的本机库(DLL和SO)?

时间:2015-07-06 20:10:41

标签: c macos gcc dll shared-libraries

我创建了一个包含本机组件的软件,因此需要创建特定于操作系统的共享库(.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文件?

1 个答案:

答案 0 :(得分:3)

你建议的是不可能的。您的编译器可以为“特定目标平台”创建代码,由“host triplet”指定,例如在我的linux机器上:

> gcc -dumpmachine
x86_64-linux-gnu

主机三元组的含义ist $(machine)-$(vendor)-$(operatingsystem)

GCC(可能还有一些其他编译器)可以构建为交叉编译器。这是一个编译器,它运行的机器具有不同的目标主机 - 三元组。对于我的系统(Debian Linux),有一个现成的GCC包用于编译windows 64bit二进制文件:gcc-mingw-w64-x86-64。理论上,您可以在系统上构建所有内容。但是不要忘记您需要目标平台的头文件,匹配的binutils(用于打包共享库)以及目标平台的链接器和标准C库。所有这些都被称为交叉工具链

现在,您可以在Mac上查找针对Linux和Windows的跨工具链。也许你会找到一些有用的东西。或者你可以采用这条路径并尝试从gcc,glibc和binutils源代码自己编译你的交叉工具。

最后,我使用真正的 Windows虚拟机来构建我在Linux上为Windows开发的软件。这更容易:)