【发布时间】:2014-03-14 10:37:38
【问题描述】:
我们需要将一个闭源 C 库集成到我们的项目中。对方可以按照我们需要的任何模式编译库,但是我们支持很多不同的Windows和Linux编译器。
我知道 DLL 将与所有主要的 Windows 编译器兼容,因此我们只能为 Windows 使用一个库。但我对 Linux 动态库 (.so) 并不熟悉。它们是否以类似的方式在所有 Linux 环境中兼容?
谢谢
【问题讨论】:
-
如果 DLL 包含任何 C++ 导出,则它不会在 Windows 上的编译器之间兼容 - 仅当它包含以兼容格式(例如
extern "C")的导出时才会如此。 -
纯C库。 (更新了标签,虽然我们的项目是 C++)
-
“我知道 DLL 将与所有主要的 Windows 编译器兼容,因此我们只能为 Windows 使用一个库。” - 先试试。我知道——“使用不同编译器创建的对象文件和静态库,甚至是使用同一编译器的显着不同版本创建的,通常无法链接在一起。(来源mingw.org/wiki/MixingCompilers)
-
@SChepurin “DLL 略有不同。有时您可以将使用一种编译器构建的 DLL 链接到使用另一种编译器编译的应用程序。”我们可以做到。
-
根据经验,创建适用于不同发行版和版本的共享库和二进制文件需要付出相当大的努力。您通常会得到一个共享库,它需要跨发行版不兼容的运行时库/版本/符号。如果您只使用 libc,并在足够旧的 distro/glibc 版本上创建共享库,那么您可能会有机会。