如何在我的dll中集成第三方库?
How to integrate third-party libraries in my dll?
我有一个包含两个 C++ 项目的 MSVS 解决方案。项目 A 是链接到第三方库(tp1.lib 和 tp2.lib)的 DLL,它被项目 B 引用,即 exe。一切都正确编译,但是当我 运行 B.exe 我得到 tp1.dll 丢失的错误,而我希望第三方库中代码的相关部分应该被提取进入我的 A.dll。
这是我的假设错误吗?如果不是,我需要您知道哪些设置会导致此行为。在其他设置中,这些是项目 A 在 Properties>ConfigurationProperties 下的设置,我想这些是相关的:
- 常规>配置类型:动态库
- C/C++>其他包含目录:%第三方包含文件 (.h) 的路径%
- Linker>General>Additional Library Directories: %path to the third-party libraries (.lib)%
- 链接器>输入>附加依赖项:tp1.lib; tp2.lib
然后,在 A.h 我有:
#include "tp1.h"
#include "tp2.h"
并在 A.cpp
#include "stdafx.h"
#include "A.h"
似乎 tp1.lib 和 tp2.lib 是 import libraries for tp1.dll和tp2.dll。它们不包含任何实际代码,只有一些帮助程序将您对这些库所做的所有调用重定向到 DLL 中的正确地址。
当您link针对 DLL 的导入库时,DLL 不会 包含在生成的二进制文件中。这就是生成的二进制文件在启动时需要 DLL 文件的原因:它在启动时搜索它,如果找不到则崩溃。
如果您想将库 tp1 和 tp2 中的所有代码添加到您的二进制文件中,您必须重建 them 作为静态库(没有任何 DLL)。然后 linking against tp1.lib 和 tp2.lib 将按您预期的那样工作。
我有一个包含两个 C++ 项目的 MSVS 解决方案。项目 A 是链接到第三方库(tp1.lib 和 tp2.lib)的 DLL,它被项目 B 引用,即 exe。一切都正确编译,但是当我 运行 B.exe 我得到 tp1.dll 丢失的错误,而我希望第三方库中代码的相关部分应该被提取进入我的 A.dll。
这是我的假设错误吗?如果不是,我需要您知道哪些设置会导致此行为。在其他设置中,这些是项目 A 在 Properties>ConfigurationProperties 下的设置,我想这些是相关的:
- 常规>配置类型:动态库
- C/C++>其他包含目录:%第三方包含文件 (.h) 的路径%
- Linker>General>Additional Library Directories: %path to the third-party libraries (.lib)%
- 链接器>输入>附加依赖项:tp1.lib; tp2.lib
然后,在 A.h 我有:
#include "tp1.h"
#include "tp2.h"
并在 A.cpp
#include "stdafx.h"
#include "A.h"
似乎 tp1.lib 和 tp2.lib 是 import libraries for tp1.dll和tp2.dll。它们不包含任何实际代码,只有一些帮助程序将您对这些库所做的所有调用重定向到 DLL 中的正确地址。
当您link针对 DLL 的导入库时,DLL 不会 包含在生成的二进制文件中。这就是生成的二进制文件在启动时需要 DLL 文件的原因:它在启动时搜索它,如果找不到则崩溃。
如果您想将库 tp1 和 tp2 中的所有代码添加到您的二进制文件中,您必须重建 them 作为静态库(没有任何 DLL)。然后 linking against tp1.lib 和 tp2.lib 将按您预期的那样工作。