我的问题类似于这个 ,但也关于静态库:
我们有一个跨平台的C ++头文件库,它可以在Windows / Linux / OS X下很好地工作,可以在多个编译器上工作,也可以在32位和64位上运行。 当用户安装了zlib或libbz2时,构build系统通过#ifdefs
启用库中的一些function。
为了使我们的用户更容易,我们希望为Windows提供zlib和libbz2等库,无论是二进制格式还是源代码,只需点击几下即可安装。 (在Linux和Mac OS X上,这些库可以简单地安装,因为系统包实际上在大多数标准安装中都是可用的,据我所知)。
最终的解决scheme应该使用户能够使用Visual C / C ++编译器2005,2008和2010以及32位和64位Windows上的MinGW轻松链接zlib和libbz2。 我们现在只关心C库在可预见的未来。
图书馆应该单独build造,我们不想把它们整合到我们的构build系统中。
据我所知,这里至less有两个自由度:
还有一点就是用户应该能够将库与debugging和优化版本的程序连接起来。 我不是Windows编程方面的专家,但据我所知,在互联网上和其他工作的开发人员中,在Windows上debugging和发布版本之间存在着这种(不同寻常的)区别。 显然,您不能将debugging程序与发布库链接,反之亦然。 它是否正确?
好的,为了清楚起见,我可以总结一下:(1) 为我们的C ++编译器提供依赖C库的最好方法是什么? (2)如果我们以后也想发布C ++库,让用户用源码编译每个编译器是唯一可行的方法,对不对?
什么是为我们的C ++编译器提供依赖C库的最好方法?
没有完美的解决方案,但是如果您的用户运送DLL,以及相应的头文件和您认为将使用的编译器的导入库 (至少在Visual Studio中),那么您将使其更容易。 请注意,大多数编译器都提供了从DLL二进制文件创建导入库的工具。
您也可以以源代码的形式发布这些库,并提供一个在不同的编译器上构建它们的脚本。
如果我们以后也想发布C ++库,让用户使用每个编译器从源代码构建是唯一可行的方法,对吧?
一般来说,使用导出C ++类和方法的DLL是非常糟糕的主意,因为这些DLL是以依赖于编译器的方式导出的,所以有效地迫使您为每个受支持的编译器提供不同的DLL。 我使用C ++库时采取以下措施:
如果我明白这个权利,那么你的用户就是那个正在构建应用程序的用户,你只是向他们提供你的头文件库。 所以在我看来,在这种情况下,您将需要记录如何将C ++库添加到其应用程序中,也许最好的方法是提供一个完整的示例应用程序,该应用程序还可以从源代码构建C ++库,至少定位Visual Studio以及您知道您的用户可以使用的其他编译器。
祝你好运。
为了获得最大的二进制兼容性,最好的方法是在Windows平台上将您的c / c ++库作为COM公开
COM对象可以从C,C ++和.NET语言中使用