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

时间:2015-01-22 11:15:25

标签: c++ dynamic static-libraries linker-errors bulletphysics

这有点烦人。

我有一个完全动态链接的项目,但是我想使用一个似乎只是静态链接的库,使用/ MT标志,是否可以构建一个单独的dll来链接到静态libs然后链接到我的项目?

我为匆忙的解释道歉,我很累。

有问题的图书馆是子弹物理图书馆。

编辑: 好吧,有了更多的谷歌搜索,似乎可以有/ MD / MDd编译版本,虽然我不知道它位于何处。

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

"如果使用/ MD标志编译整个引擎,那么您将使用'发布DLL'子弹的版本。您不应该将使用/ MD编译的库与使用/ MT编译的库混合使用。这是主要区别。没有"单独的DLL(.dll)"子弹的文件。"

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

简而言之,我不知道该怎么做。

他正在做的事情:

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

这是提供的说明。 Here

最后编辑:非常感谢你的帮助!我设法最终构建它

对不起任何拼写错误,我当时很累:3

1 个答案:

答案 0 :(得分:1)

简短的回答,是的。

虽然您可以将动态库链接到它,但有些情况可能会导致严重问题,具体取决于库的编写方式(状态信息等)。

虽然它的工作量更大,但封装DLL可能是最安全的操作方法。但是,这只是因为您只需要从应用程序的各个组件中包装实际调用的函数,而不是库提供的整个API。此外,您需要对实际包装的函数进行某种轻微的重命名,以防止出现歧义。

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