C ++将静态库链接到动态库

C++ Linking static librarys to a dynamic library

有点烦人

我有一个完全动态 linked 的项目,但我想使用一个似乎只设计为静态 linked 的库,使用 /MT 标志,是可以构建一个单独的 dll 到 link 到静态库,然后 link 到那个在我的项目中?

很抱歉解释得太仓促了,我很累。

有问题的库是子弹物理库。

编辑: 好吧,通过更多的谷歌搜索,似乎可以有一个 /MD/MDd 编译版本,虽然我不确定它的位置。

编辑(对于任何感兴趣的人): 根据此页面:http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=3846

"If your entire engine is compiled with the /MD flag then you would use the 'release DLL' version of bullet. You should not mix libraries compiled with /MD with ones compiled with /MT. That's the main difference. There is no "项目符号的单独 DLL (.dll)" 文件。"

编辑:如果我使用 MSVC 运行时库构建它,那么它会失败。

总之,我不知道该怎么办

他就是我在做的事:

在 cmake 中构建整个库,使用 Visual studio 12, 2013 编译器。 然后构建cmake构建的项目,构建所有需要的项目。

这是随附的说明。 Here

上次编辑:非常感谢大家的帮助!我最终成功构建了它

抱歉有任何拼写错误,当时我很累:3

简答,是的。

虽然您可以只使用动态库 link,但在某些情况下这可能会导致严重的问题,具体取决于库的编写方式(状态信息等)。

尽管工作量更大,但包装器 DLL 可能是最安全的做法。但是,这被以下事实所抵消:您只需要包装从应用程序的各个组件实际调用的函数,而不是库提供的整个 API。此外,您需要对实际包装的函数进行某种轻微的重命名,以防止歧义。

编辑时: 只是看了一下子弹物理库,因为我个人并不熟悉它,并且在我最初回答后对你的选择感到好奇。如果他们明确表示不支持库的动态构建,我认为包装您实际使用的任何函数绝对是最安全的。太糟糕了。希望横截面不要太大