VC ++依赖关系链接问题?

时间:2018-01-26 14:38:29

标签: visual-studio visual-c++ libavcodec libavformat

我的项目在Visual Studio 2010上使用了一些libavcodec库。 在更新了libs(替换lib和包含来自Libav)并解决所有编译器错误(3年后在libavcodec中更改了一些内容)之后,项目编译没有问题,但是我编译的dll不起作用。

我99%肯定这是一些依赖问题。当然,我不仅更新了我项目的链接库,还将正确的新dll放入了构建文件夹。

我从未见过的奇怪的事情是依赖步行者检测到来自不同dll的完全错误的导入,见图像。

enter image description here

正如您所看到的,所有链接的库似乎都表示相同的导入 - 这些库不会导出的功能。

除了在链接器部分中指定libs之外,我唯一能做的就是在我的程序中包含.h文件,当然然后大量使用它们; - )

extern "C" {   
#include <libavcodec/avcodec.h>    
#include <libavutil/opt.h>
#include <libavutil/imgutils.h>        
#include <libavformat/avformat.h>        
#include <libswscale/swscale.h>
#include <libswresample\swresample.h>
}

我尝试了什么:

  • 确保项目使用正确的库和标题
  • 清理构建路径,尝试调试和发布版本
  • 检查是否有新的包含我可能忘记链接(这最终会在编译器错误中结束)
  • 重启VStudio
  • 构建了一个链接到相同dll的测试程序,自动显示正确的导入
  • 使用VS 2013编译,完全没有变化

1 个答案:

答案 0 :(得分:1)

根据您当前的项目设置自定义构建二进制文件是避免像您面临的那样令人讨厌的链接器错误的关键。

您可以使用github中的vcpkg.exe构建ffmpeg项目并为x86或x64计算机重建二进制文件。

在系统上安装vcpkg后,转到Powershell提示符并输入。\ vcpkg install ffmpeg。完成安装后,输入“。\ vcpkg integrate install”,以便可以使用最新的ffmpeg库。