【问题标题】:Compiling ffmpeg for iPhone SDK (Symbol(s) not found - Linker)为 iPhone SDK 编译 ffmpeg(未找到符号 - 链接器)
【发布时间】:2011-01-16 11:12:39
【问题描述】:

我在我的应用程序中使用 ffplay。我实现了这个项目中使用的库:http://code.google.com/p/ffmpeg4iphone/downloads/detail?name=ffplay-xproj.zip&can=2&q=

但我已经看到这个来源非常古老(2009 年 4 月)。我想构建新的库,然后在我的项目中使用这些进行更改。

我做了什么:

  1. 下载了ffmpeg源码:(使用命令行:svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg)
  2. 使用特殊的 ./configure 选项和气体处理器编译项目: http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/2009-October/076618.html
  3. 我在这里只更改了 iPhone SDK 4.1 的实际位置的路径
  4. 将 xCode 活动目标项目设置中的标头路径更改为我的 ffmpeg 文件夹
  5. 在我的 xCode 项目中包含 .a 文件
  6. 添加了其他链接器标志 -lm -lbz2 -lz
  7. 尝试构建我的应用程序,但出现一些链接器错误,其中未找到符号。

未定义的符号: “avcodec_init()”,引用自:

其他错误几乎相同(_av_codec.....)

如何正确构建它?

【问题讨论】:

  • 您上面提到的有关特殊 ./configure 选项的链接会导致 404。您能解释一下这些选项是什么,因为我遇到了类似的问题

标签: iphone objective-c xcode ios4 ffmpeg


【解决方案1】:

我找到了解决方案:我将架构设置为 Optimized(arm7),然后一切正常。

还有一个问题:我使用 ffmpeg 流式传输在线流。当我在 3G 中时,我应该设置哪些值以获得良好的流媒体质量。这就是我所做的:

  • 将音频缓冲区设置为 1024
  • 将 mpeg 的低分辨率值设置为 3

【讨论】:

    【解决方案2】:

    不确定您使用的是 C 还是 C++ (g++) 编译器,但请尝试使用 extern "C" 保护 ffmpeg 的 #includes:c++ 编译器(如果使用)可能会破坏函数名称,因此链接错误。

    尝试用 extern "C" 括起来你的包含:

    #ifdef __cplusplus
    extern "C" {
    #endif 
    
    #include <libavcodec/avcodec.h>
    #include <libavformat/avformat.h>
    
    #ifdef __cplusplus
    }
    #endif 
    

    【讨论】:

    • 如果我使用这个 extern "C" { } 包含头文件,那么我会收到以下错误:错误:预期标识符或字符串常量之前的 '('
    • 哦,这意味着您肯定在使用 c++ 编译器 :-) 请参阅上面我编辑的代码。另见:parashift.com/c++-faq-lite/mixing-c-and-cpp.html [32.4]
    • 现在我再次编译,得到这个错误:ld: ldr 12-bit位移超出范围(4096 max +/-4096)。与我已经知道的差异的链接。这是我的文件:pastie.org/private/lrpcrxqhk5yqsj1ydrchfg
    猜你喜欢
    • 2015-07-20
    • 1970-01-01
    • 2015-12-23
    • 2011-02-10
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 2019-06-04
    • 2022-01-15
    相关资源
    最近更新 更多