我正在尝试创建一个用于Windows/MSVC的c ++库.
我的问题是,似乎为了正确链接,我需要分发一堆不同的版本,链接到不同版本的MSVC的c ++运行时 - 单线程和多线程,调试和发布,不同的编译器版本,各种其他安全性和其他选择.
我喜欢分发两个,32位和64位.
我的想法是为我的所有STL类型使用不同的新运算符(比如,mynew)和自定义分配器.创建lib时,/ nodefaultlib.然后,当从父项目链接时,要求他们将mynew转换为new,并将我的stl分配器转换为标准的(或者他们选择的一个).我想我需要删除,以及其他一些功能.当然,我会提供一个示例的thunking实现与库,但这将有希望为每个人节省很多头痛.
这可能吗?有没有人试过这个?是否有关于Windows/MSVC上的库创建/分发的最佳实践?
你想要静态链接作为一般答案.
关于克里斯回答的快速说明(不想去除助力因为它主要是好的,但是......):
不要链接到msvcrt.dll(无版本的); 这是特定于操作系统的版本DLL,如果链接到它,您的应用程序可能无法在其他版本的Windows上运行.据我所知,你应该始终链接到msvcrt ##.dll.DDK可能包含一个lib,但除非你真的知道你在做什么,否则不要链接到它.