如何配置VS 2010以生成使用其他DLL的DLL

时间:2014-10-23 21:43:39

标签: c++ c visual-studio-2010 dll ffmpeg

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

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

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

如果我的项目是静态库而不是DLL,那么一切都很好。但是,我需要生成一个DLL。那么,我如何配置VS2010来引入这些ffmpeg DLL(或libs)并完成链接并生成我的DLL。

额外信用,有没有办法将DLL拉在一起所以我只需要部署我的单个DLL而不必安装除我写的那个之外的所有ffmpeg DLL?

1 个答案:

答案 0 :(得分:0)

事实证明我遇到了很多问题。为此,我需要改变我的#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位。我不确定这是否会使事情变得混乱,但我确实切换了它们以保持一致。