我创建了一个包含本机组件的软件,因此需要创建特定于操作系统的共享库(.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
文件?
答案 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开发的软件。这更容易:)