在Windows上分发(本机C ++)库

时间:2013-12-12 17:52:51

标签: c++ dll shared-libraries static-libraries

我想与第三方分享我用本机C ++编写的库。我的意思是,我想分享一个库,提供我与使用Windows的人开发的功能,我不希望与他们共享源代码。我们可以在这里采用相同的CPU架构。

我只是直接共享源代码,主要是在linux上。因此,确保我能提供尽可能多样化的二进制文件的标准过程对我来说是一个谜。我发现在线文档缺乏。

我目前正致力于共享.lib文件,但它似乎暗示这些只有在连接它的编译器与我用来生成该lib文件的编译器相同时才有效。

更常见的方法似乎是动态链接路由 - 提供.dll。我并不十分喜欢这样做的开销,因为看起来我的函数和类签名看起来像这个__declspec(dllexport) void __cdecl Function1(void);。由于我的目标是保持跨平台兼容性,我可以想象我的源代码会变得混乱。此外,除非我进入运行时链接路由,否则我将不得不提供一个导入库.lib,这会让我回到原来的问题。

是否有在Windows上分发库的指南?运行时链接DLL是唯一现实的方法吗?它可靠吗? (想到冲突的运行时库的问题)。

1 个答案:

答案 0 :(得分:1)

“导出”可在不同编译器和标准库实现中可靠工作的C ++类的最简单方法是使用cppcomponents https://github.com/jbandela/cppcomponents

库只是标题,因此不需要构建。它适用于Linux和Windows,不需要任何导入库。但是,它需要一个功能强大的C ++ 11编译器(gcc 4.7.2,clang 3.2,Visual Studio 2013所有工作)。

  • 它支持std :: string,vector,tuple以及其他标准类型。
  • 它支持例外。
  • 它还支持std :: function之类的对象,可以在不同的编译器中使用。
  • 还有内置的支持事件,可以使您的观察者模式更容易实现。

该库是根据Boost许可证发布的,因此它可以免费用于商业和开源。

有关使用它的示例,请查看我的stackoverflow对类似问题的回答 https://stackoverflow.com/a/19592553/1858436

将此文件用于您的库将允许从Visual C ++(调试版和发行版以及未来版本)以及GCC使用单个二进制文件。否则,您将不得不支持调试版本,发行版本和GCC版本,并且当出现新版本时必须重建该版本。

如果您有一个特定的小例子,我可以帮助您。