【发布时间】:2013-12-12 17:52:51
【问题描述】:
我想与第三方共享一个我用原生 C++ 编写的库。我的意思是我想与使用 Windows 的人共享一个库,提供我开发的功能,我不希望与他们共享源代码。我们可以在这里假设相同的 CPU 架构。
我只直接分享过源代码,而且大多是在 linux 上。因此,确保我可以提供尽可能通用的二进制文件的标准过程对我来说是一个谜。而且我发现在线文档缺乏。
我目前正在共享 .lib 文件,但它似乎暗示只有在链接它的编译器与我用来生成该 lib 文件的编译器相同时,这些才有效。
更常见的方法似乎是动态链接路由 - 提供 .dll。我不太喜欢这样做的开销,因为我的函数和类签名看起来像这样__declspec(dllexport) void __cdecl Function1(void);。由于我的目标是保持跨平台兼容性,我可以想象我的源代码会变成一堆条件编译。此外,除非我走运行时链接路线,否则我将不得不提供一个导入库 .lib,这让我回到了与以前相同的问题。
是否有在 Windows 上分发库的指南? DLL 的运行时链接是唯一现实的方法吗?它可靠吗? (我想到了运行时库冲突的问题)。
【问题讨论】:
-
通常
__declspec(dllexport)被封装在一个宏中,在为Windows构建库时扩展为__declspec(dllexport);__declspec(dllimport)在 Windows 上使用库时,或者在为其他平台构建时(插入其他平台特定的东西)。但是,如果您走这条路,则需要使用 C 接口,而不是导出类或其他 C++ 东西。即使导入库是由不同的编译器生成的,您也可以链接到导入库。 -
@JamesMcNellis 这是您认为最好的方法吗?这对我来说并不理想,因为我已经编写了我的库来非常广泛地使用观察者模式。我想我不得不迁移到函数指针。哎呀!
标签: c++ dll shared-libraries static-libraries