在 Windows 上创建兼容 macOS 和 Linux 的静态库

标签 c compilation cross-platform static-libraries cross-compiling

我想使用与 macOS 和 Linux 兼容的 MSVC/IXX 在 Windows 中生成静态库文件。

我使用的是C(比如说C99),功能非常简单。例如:

void AddArray(float* mA, float* mB, float* mC, int numElements){

    int ii;


    for(ii = 0; ii < numElements; ii++){
        mC[ii] = mA[ii] + mB[ii];
    }
}

有没有一种方法可以在 Windows 上仅构建一次库并在任何地方使用它?
如果不在 Windows 上,是否可以在 Linux 上完成并在 Windows 和 macOS 上运行?

这个想法是使用相同的编译器编译一次,而不是在 Linux 上使用 MinGW

最佳答案

这不可能以您想要的简单方式(每个操作系统/编译器一个库文件),因为静态库是编译的二进制代码,它不可避免地引用平台细节并且必须(通常)位于编译器中具体格式。同一操作系统上的多个编译器之间存在一定程度的兼容性,但永远不会在不同操作系统上工作。 Mac OS 曾经有胖二进制文件的概念(其中 32 位和 64 位二进制代码彼此相邻),但由于它们完全转移到 64 位,所以这不再真正相关了(尽管它们仍然存在并且仍然可以使用)。

如果您想以二进制形式分发,则需要为您想要支持的每个平台(操作系统/架构/工具链)组合提供不同的二进制文件。

关于在 Windows 上创建兼容 macOS 和 Linux 的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55758704/

相关文章:

user-interface - 游戏编程 - GUI

c - C中的内存管理

c++ - 无法将重复字段添加到 protobuf?

linux - 为 Hyper-V 编译最小的 Linux 3.5 内核

input - 什么工具可以拦截所有桌面操作系统的数字锁定键?

c++ - 周期约为 100ms 的可移植周期性定时器

c - 如何避免按 Enter 和 getchar() 只读取单个字符?

c - 在C中从http接收XML文件

c - 将遗留 C 代码(与全局变量的广泛使用紧密结合)重构为共享库

build - Dojo 1.8 和构建(或缺少)