如何在我的DLL中集成第三方库?

时间:2015-07-20 13:01:23

标签: c++ dll static-libraries static-linking dynamic-linking

我有一个带有两个C ++项目的MSVS解决方案。项目A是链接到第三方库(tp1.lib和tp2.lib)的DLL,它由项目B(exe)引用。一切都正常编译,但是当我运行B.exe时,我得到tp1.dll缺失的错误,而我希望第三方库中的代码的相关部分应该被拉入我的A.dll。

这是我的假设吗?如果没有,我需要您知道哪些设置可能导致此行为。在其他设置中,这些是项目A在属性> ConfigurationProperties下我认为相关的那些:

  • 常规>配置类型:动态库
  • C / C ++>其他包含目录:第三方包含文件的%路径(.h)%
  • 链接器>常规>其他库目录:第三方库的%路径(.lib)%
  • 链接器>输入>其他依赖项:tp1.lib; tp2.lib

然后,在A.h我有:

#include "tp1.h"
#include "tp2.h"

和A.cpp

#include "stdafx.h"
#include "A.h"

1 个答案:

答案 0 :(得分:3)

对于 tp1.dll tp2, tp1.lib tp2.lib 似乎是import libraries。 DLL 。它们不包含任何实际代码,只有一些帮助程序将您对这些库所做的所有调用重定向到DLL中的正确地址。

当您链接到DLL的导入库时,DLL 包含在生成的二进制文件中。这就是为什么生成的二进制文件在启动时需要DLL文件的原因:它在启动时搜索它,如果找不到则会崩溃。

如果要将库 tp1 tp2 中的所有代码添加到二进制文件中,则必须将它们重建为静态库(没有任何DLL)。然后链接 tp1.lib tp2.lib 将按预期工作。