Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone iOS 5.1上的ffmpeg未定义符号错误_Iphone_Ios_Ffmpeg - Fatal编程技术网

Iphone iOS 5.1上的ffmpeg未定义符号错误

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:错误:链接器命令失败,退

因此,我花了几个小时的时间在网上查找关于为iOS构建ffmpeg的信息。构建过程似乎运行良好,我最终得到了armv6和armv7的fat文件,并将其拖到了我的项目中

但是,每当我尝试使用avcodec_init命令时,都会出现以下错误:

架构armv7的未定义符号: _avcodec_init,引用自:

 -[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