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

标签 c macos gcc dll shared-libraries

我创建了一个具有 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/

相关文章:

c - C 中的位掩码

java - Mac Safari 不会运行大小为零的小程序

c++ - __attribute__((constructor)) 究竟是如何工作的?

C 操作目录 : how to position at a directory by giving its name in main arguments

c - 类函数宏的错误扩展

python - 从 CLI 运行时阻止 python GUI 程序退出

macos - 尝试 NSTouchbar 时 Xcode 8.1 缺少 10.12.1 SDK

python - 如何修复错误 : command 'x86_64-linux-gnu-gcc' failed with exit status 1

c - GCC 是否为传递给函数的数组创建 typedef?

c - hiredis c 套接字