Iphone iOS 5.1上的ffmpeg未定义符号错误
因此,我花了几个小时的时间在网上查找关于为iOS构建ffmpeg的信息。构建过程似乎运行良好,我最终得到了armv6和armv7的fat文件,并将其拖到了我的项目中 但是,每当我尝试使用avcodec_init命令时,都会出现以下错误: 架构armv7的未定义符号: _avcodec_init,引用自:Iphone iOS 5.1上的ffmpeg未定义符号错误,iphone,ios,ffmpeg,Iphone,Ios,Ffmpeg,因此,我花了几个小时的时间在网上查找关于为iOS构建ffmpeg的信息。构建过程似乎运行良好,我最终得到了armv6和armv7的fat文件,并将其拖到了我的项目中 但是,每当我尝试使用avcodec_init命令时,都会出现以下错误: 架构armv7的未定义符号: _avcodec_init,引用自: -[FirstViewController viewDidLoad] in FirstViewController.o ld:未找到架构armv7的符号 clang:错误:链接器命令失败,退
-[FirstViewController viewDidLoad] in FirstViewController.o
ld:未找到架构armv7的符号
clang:错误:链接器命令失败,退出代码为1使用-v查看调用
库文件包含在项目设置的“链接二进制文件与库”中,因此它们肯定会编译到应用程序中。我就是搞不懂为什么我会在这件事上出错
我尝试了几个不同的项目,从网上下载了一些现有的项目文件,但也遇到了同样的错误
这是我使用的构建脚本:
导出平台=iPhoneOS导出最小版本=4.0导出
最大版本=5.1导出
DEVROOT=/Volumes/Lion/Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.PLATFORM/Developer
导出SDKROOT=$DEVROOT/SDKs/${PLATFORM}${MAX_VERSION}.sdk导出
CC=$DEVROOT/usr/bin/llvm gcc导出LD=$DEVROOT/usr/bin/LD导出
CPP=$DEVROOT/usr/bin/CPP导出CXX=$DEVROOT/usr/bin/llvm-g++导出
AR=$DEVROOT/usr/bin/AR导出LIBTOOL=$DEVROOT/usr/bin/LIBTOOL导出
NM=$DEVROOT/usr/bin/NM导出CXXCPP=$DEVROOT/usr/bin/cpp导出
RANLIB=$DEVROOT/usr/bin/RANLIB
COMMONFLAGS=-pipe-gdwarf-2-no-cpp-precomp-isysroot${SDKROOT}
-marm-fPIC export LDFLAGS=${COMMONFLAGS}-fPIC export CFLAGS=${COMMONFLAGS}-fvisibility=隐藏导出
CXXFLAGS=${COMMONFLAGS}-fvisibility=隐藏
-隐藏的可视性内联线
FFMPEG_LIBS=libavcodec libavdevice libavformat libavutil libswscale
回声大楼armv6
使干净。/configure\
-cpu=arm1176jzf-s\
-额外的cflags='-arch armv6-miphoneos version min=${min_version}-mthumb'\
-额外的ldflags='-arch-armv6-miphoneos-version-min=${min\u version}'\
-启用交叉编译\
-拱=臂\
-目标os=达尔文\
-cc=${cc}\
-sysroot=${SDKROOT}\
-前缀=已安装\
-禁用网络\
-禁用解码器\
-禁用多路复用器\
-禁用解复用器\
-禁用设备\
-禁用解析器\
-禁用编码器\
-禁用协议\
-禁用过滤器\
-禁用BSF\
-启用解码器=h264\
-启用解码器=svq3\
-启用gpl\
-启用pic\
-禁用doc perl-pi-e的/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/'config.h make-j3
mkdir-p build.armv6,用于${FFMPEG_LIBS}中的i;执行cp./$i/$i.a
./build.armv6/;完成
回声大楼armv7
使干净。/configure\
-cpu=cortex-a8\
-额外cflags='-arch armv7-miphoneos version min=${min_version}-mthumb'\
-额外的ldflags='-arch armv7-miphoneos version min=${min_version}'\
-启用交叉编译\
-拱=臂\
-目标os=达尔文\
-cc=${cc}\
-sysroot=${SDKROOT}\
-前缀=已安装\
-禁用网络\
-禁用解码器\
-禁用多路复用器\
-禁用解复用器\
-禁用设备\
-禁用解析器\
-禁用编码器\
-禁用协议\
-禁用过滤器\
-禁用BSF\
-启用解码器=h264\
-启用解码器=svq3\
-启用gpl\
-启用pic\
-禁用doc perl-pi-e的/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/'config.h make-j3
mkdir-p build.armv7,用于${FFMPEG_LIBS}中的i;执行cp./$i/$i.a
./build.armv7/;完成
mkdir-p build.universal for i in${FFMPEG_LIBS};做lipo-create
./build.armv7/$i.a./build.armv6/$i.a-输出。/build.universal/$i.a;
完成
对于${FFMPEG_LIBS}中的i;执行cp./build.universal/$i.a./$i/$i.a;完成
安装
我还没有使用ffmpeg,尽管我的一些老板让我考虑过使用它,但我建议这里可能会发生一些事情 一, 让我们看看符号是否真的存在于编译的库中 转到Terminal并将cd刻录到.a库所在的目录 然后输入nm-arch armv7 ffmpeg.a | egrep avcodec_init,您可以将我的示例命令中的ffmpeg.a替换为.a库的实际名称,全部放在一行中。这将转储armv7体系结构库中的符号,并将其传输到grep中,grep将显示您的库中是否确实存在avcodec_init 如果它没有出现,那么它就没有被编译到您的库中 二, 如果库中确实存在符号,请确保项目中.a文件的路径正确。您可能无意中只包含了仅限模拟器的i386体系结构版本 对ffmpeg