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。此外,您需要对实际包装的函数进行某种轻微的重命名,以防止歧义。
编辑时:
只是看了一下子弹物理库,因为我个人并不熟悉它,并且在我最初回答后对你的选择感到好奇。如果他们明确表示不支持库的动态构建,我认为包装您实际使用的任何函数绝对是最安全的。太糟糕了。希望横截面不要太大
有点烦人
我有一个完全动态 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。此外,您需要对实际包装的函数进行某种轻微的重命名,以防止歧义。
编辑时: 只是看了一下子弹物理库,因为我个人并不熟悉它,并且在我最初回答后对你的选择感到好奇。如果他们明确表示不支持库的动态构建,我认为包装您实际使用的任何函数绝对是最安全的。太糟糕了。希望横截面不要太大