c++ - 如何在我的dll中集成第三方库?

标签 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 在 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.libtp2.libimport libraries tp1.dlltp2.dll。它们不包含任何实际代码,只有一些帮助程序将您对这些库所做的所有调用重定向到 DLL 中的正确地址。

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

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

关于c++ - 如何在我的dll中集成第三方库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31517254/

相关文章:

c++ - 我正在尝试使用 OpenCV 对彩色图像进行降噪

c++ - 将数字与按位运算符相乘时的错误

c++ - Visual Studio 2008 : Use external Debug-DLL for Debug-Run and external Release-DLL for Release-Run

dll - 什么是 “.dll.a”文件?

c++ - 在使用特定标志时添加#define

c++ - C++ 中的 4d 映射与元组

c++ - 对指向 const 对象的非常量指针的非常量引用

c# - 如何将 native DLL 与托管应用程序捆绑在一起?

qt - qt 4.6 应用程序可以运行的最旧的 glib 版本是什么

c - 在 gcc 中使用数学函数时出错?