未定义的swscale函数引用

时间:2015-11-21 09:51:23

标签: c++ c qt ffmpeg linker

我的应用根本无法链接到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*

  3. 输出:

    -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
    
    1. 该库具有正确的架构:

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

    2. 输出:

       Non-fat file: /usr/local/Cellar/ffmpeg/2.8.2/lib/libswscale.3.dylib is architecture: x86_64
      

      我的机器架构:

      $uname -m
      

      输出:

      x86_64
      
      1. 符号存在于二进制文件中,例如:

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

      2. 输出:

        000000000004e3b4 T _sws_alloc_context
        
        1. 我还试过了几个不同的swscale二进制文件,不仅仅是" brew"一些,但没有改变。我也尝试在我的Ubuntu笔记本电脑上做同样的事情,但它仍然是一样的。
        2. 这实际上是我尝试构建的QT应用程序。我应该提一下,我没有以同样的方式链接其他库的问题。 我还使用:

          成功编译了swscale-test.c(在libwscale源代码中)
          clang swscale-test.c -lswscale -lavutil
          

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

1 个答案:

答案 0 :(得分:5)

您没有显示您的代码,但通常问题是您在编译c ++代码时需要{f} {#1}} ffmpeg #include语句(请参阅FAQ):

extern "C"

所有其他ffmpeg包括同样的内容。