如何配置 VS 2010 以制作利用其他 DLL 的 DLL

Posted

技术标签:

【中文标题】如何配置 VS 2010 以制作利用其他 DLL 的 DLL【英文标题】:How to configure VS 2010 to make a DLL which utilizes other DLLs 【发布时间】:2014-10-23 21:43:39 【问题描述】:

我的 Visual Studio 2010 项目目标是一个 DLL。此特定 DLL 用于某些视频分析。我正在构建的 DLL 将连接到 RTSP 摄像机并向分析引擎提供视频。我的 DLL 必须提供的接口已被分析引擎详细记录。

我已将我的 VS 项目配置为具有 DLL 的目标。它编译我的代码就好了。但是,我正在使用 ffmpeg 来协助处理一些 RTSP 内容并将视频帧转换为分析引擎所需的格式。我有 ffmpeg 的标头,并且可以针对它进行编译。但是,当我的 DLL 进行链接时,来自 ffmpeg 的所有函数都被列为未解析的外部符号。

我将库(avcodec、avutil 等)列为附加链接器依赖项(显然是 .lib 版本),当我打开详细模式时,我可以看到它获取了我指定并找到的附加链接器目录路径他们目录中的 ffmpeg 文件。但是,它似乎不想链接它们。

如果我让我的项目成为静态库而不是 DLL,那么一切都可以正常链接。但是,我需要生成一个 DLL。那么,我如何配置 VS2010 以拉入这些 ffmpeg DLL(或库)并完成链接并生成我的 DLL。

额外的功劳,有没有办法将 DLL 合并在一起,所以我只需要部署我的单个 DLL,而不必安装除了我编写的那个之外的所有 ffmpeg DLL?

【问题讨论】:

【参考方案1】:

事实证明,我遇到了很多问题。为此,我需要按如下方式更改我的#include 语句:

extern "C"

#include "include\libavcodec\avcodec.h"
#include "include\libavformat\avformat.h"
#include "include\libavformat\avio.h"
#include "include\libswscale\swscale.h"
#include "include\libavutil\dict.h"
#include "include\libavutil\frame.h"

然后我有两个选项来包含 DLL。第一个涉及在我需要加载的每个 DLL 的代码中添加一行。如下:

#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg-latest\\lib\\avformat.lib")
#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg-latest\\lib\\swscale.lib")
#pragma comment(lib, "..\\..\\..\\..\\contrib\\ffmpeg-latest\\lib\\avutil.lib")

另外,我可以在链接器选项卡中直接将 lib 列为附加依赖项。如:“..\..\..\..\contrib\ffmpeg-latest\lib\avcodec.lib”

我还没有尝试使用它运行,但根据我所阅读的内容,它只有在我在运行时提供 DLL 时才会起作用。我不知道如何让它将我的 DLL 中的 DLL 包含到一个大 DLL 中。

我还下载了 64 位库并正在编译 32 位。我不确定这是否会搞砸事情,但我确实切换了,所以它们是一致的。

【讨论】:

以上是关于如何配置 VS 2010 以制作利用其他 DLL 的 DLL的主要内容,如果未能解决你的问题,请参考以下文章

vs2010+qt5.40离线exe中dll配置

利用VS2010工具,反编译C++的dll

vs2005制作WEB项目安装文件和发布项目的区别

vs参数配置

在 VS2010 (CUDA) 中导出 DLL 的问题

如何用VS2010编写动态链接库DLL