未定义的swscale函数引用

rig*_*717 1 c c++ linker qt ffmpeg

我的应用程序根本无法链接到swscale库.我的意思是我试图在我的代码中使用的任何swscale方法都成为一个未定义的引用.我知道这个错误意味着什么 - 链接器找不到任何已使用函数的定义.

但问题是我确保:

  1. -L/usr/local/Cellar/ffmpeg/2.8.2/lib -lswscale 在链接器输出中,链接器实际上找到了lib,否则会抱怨丢失 swscale
  2. 图书馆真的存在:

    $ll /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale*

输出:

-r--r--r--  1 myuser  admin   519K Nov 20 19:33 /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.1.101.dylib
lrwxr-xr-x  1 myuser  admin    24B Nov 20 19:32 /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.dylib -> libswscale.3.1.101.dylib
-r--r--r--  1 myuser  admin   607K Nov 20 19:32 /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.a
lrwxr-xr-x  1 myuser  admin    24B Nov 20 19:32 /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.dylib -> libswscale.3.1.101.dylib
Run Code Online (Sandbox Code Playgroud)
  1. 该库具有正确的架构:

    $lipo -info /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.dylib

输出:

 Non-fat file: /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.dylib is architecture: x86_64
Run Code Online (Sandbox Code Playgroud)

我的机器架构:

$uname -m
Run Code Online (Sandbox Code Playgroud)

输出:

x86_64
Run Code Online (Sandbox Code Playgroud)
  1. 符号存在于二进制文件中,例如:

    $nm /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.1.101.dylib | grep sws_alloc_context

输出:

000000000004e3b4 T _sws_alloc_context
Run Code Online (Sandbox Code Playgroud)
  1. 我也试过了几个不同的swcale二进制文件,不仅仅是"brew",还没有改变.我也尝试在我的Ubuntu笔记本电脑上做同样的事情,但它仍然是一样的.

这实际上是我正在尝试构建的QT应用程序.我应该提一下,我没有以同样的方式链接其他库的问题.我也使用以下方法成功编译swscale-test.c(在libwscale源代码中):

clang swscale-test.c -lswscale -lavutil
Run Code Online (Sandbox Code Playgroud)

你有任何想法有什么不对或我还能找到其他原因吗?

Ron*_*tje 5

您没有显示您的代码,但通常问题是您extern "C"在编译c ++代码时需要使用ffmpeg #include语句(请参阅常见问题解答):

extern "C" {
#include "libswscale/swscale.h"
}
Run Code Online (Sandbox Code Playgroud)

所有其他ffmpeg包括同样的情况.