【发布时间】:2011-10-12 15:03:47
【问题描述】:
我需要验证一些我有疑问的事情。如果共享库 (.dll) 是用 C 语言编写的,符合 C99 标准并在编译器下编译。说MinGw。然后根据我的经验,它是二进制兼容的,因此可以从任何其他编译器中使用。说 MS Visual Studio。我说以我的经验,因为我已经成功地尝试过不止一次。但我需要验证这是否是一个规则。
此外,我想问一下是否确实如此,那么为什么完全用 C 编写的库(例如 openCV)不为每个不同的操作系统提供编译的二进制文件?我知道最明显的原因是设置所有编译时参数,但除此之外没有一个对吗?
编辑:我添加了一个附加问题,我认为这是对原始问题的逻辑扩展。这不就是创建一个封闭源代码库的方式吗?由于提供源的选项在那里消失了,因此提供二进制文件是唯一的选择。在这种情况下,为尽可能多的架构提供二进制文件是理想的结果,而 C 显然是在系统和编译器之间具有最佳可移植性的选择。对吧?
【问题讨论】:
-
非常有趣的问题。奇怪的是,即使我在 80 年代初期和中期还是 UN*X 世界中的调试器专家,我也从未真正考虑过这一点。当然,我主要使用符号表作为指导,但仍然可能存在结构中的位打包和将参数推入堆栈的问题。我猜在那个世界中,大多数代码都是/曾经使用制造商的编译器或 GCC 的一个或另一个版本编译的,因此存在固有的一致性,但这并不完全符合您的要求。
标签: c shared-libraries binary-compatibility