C++ 错误:在swscale-2.dll中找不到序号139

C++ 错误:在swscale-2.dll中找不到序号139,c++,visual-studio-2010,ffmpeg,C++,Visual Studio 2010,Ffmpeg,名义上是ffmpeg问题,但可能是标准windows库和VS版本的问题 跑赢7,VS2010;我的程序使用ffmpeg库和DLL,所以我刚刚将ffmpeg库升级为ffmpeg-1.1.1 win 32 dev for libraries和win32 shared for DLL 在调试模式下运行我的程序,运行正常。已更改为释放模式,重新编译所有并尝试运行。我立即收到错误消息,序号139无法在swscale-2.dll中找到 在两次运行中使用相同的DLL[嗯,我将它们从调试文件夹复制到发布文件夹。

名义上是ffmpeg问题,但可能是标准windows库和VS版本的问题

跑赢7,VS2010;我的程序使用ffmpeg库和DLL,所以我刚刚将ffmpeg库升级为ffmpeg-1.1.1 win 32 dev for libraries和win32 shared for DLL

在调试模式下运行我的程序,运行正常。已更改为释放模式,重新编译所有并尝试运行。我立即收到错误消息,序号139无法在swscale-2.dll中找到

在两次运行中使用相同的DLL[嗯,我将它们从调试文件夹复制到发布文件夹。是在调试模式下运行时的两次]

有什么线索吗?这件事把我难住了


所以我比较了debug和release之间的属性页

  • 两者都有多线程调试集(c++/代码生成)
  • 发布模式将线性优化引用设置为Yes/OPT:REF,而调试没有

==>将其设置为“否”,并且没有收到错误消息“未找到序号39”。

这与使用错误的文件几乎没有什么不同。如果您自己构建,请确保:

  • 使用FFmpeg生成的正确DLL和LIB文件
  • 您的应用程序加载正确的DLL,例如,不是第三方软件安装的\Windows\system32中的DLL

您还可以使用Dependency Walker来识别不匹配,并检查您尝试使用的swscale.dll是否真的有问题的导出函数。

不同库和dll的建议是错误的。重新编译库的建议是错误的,因为ffmpeg本质上使用了一些类似Linux的结构,并且只能在windows下编译,因此使用它们的库和DLL是困难的

这是我痛苦地找到的正确答案——不要删除它,因为它实际上是一个正确的答案,适用于任何被“Ordinal xxx找不到i yyy.dll”错误困扰的人

所以我比较了debug和release之间的属性页

两者都有多线程调试集(c++/代码生成) 发布模式将线性优化引用设置为Yes/OPT:REF,而调试没有;
==>将其设置为“否”,但未收到错误消息“未找到序号39”。

我在为windows编译ffmpeg时遇到此问题。这总是dll/lib不匹配。即使我的主exe链接到正确的ffmpeg lib,我项目中的某些dll或lib也没有使用新编译的ffmpeg lib。因此,您可能已经正确编译了调试依赖项,而不是版本依赖项。

正如我所解释的,调试和发布版本使用相同的库和DLL。所以这是另一回事。