【发布时间】:2012-05-05 16:10:08
【问题描述】:
所以我现在已经花了几个小时来研究网上关于为 iOS 构建 ffmpeg 的少量信息。构建过程似乎运行良好,我最终得到了 armv6 和 armv7 的胖文件,我将它们拖到我的项目中。
但是,每当我尝试使用“avcodec_init()”命令时,我都会收到以下错误:
架构 armv7 的未定义符号: “_avcodec_init”,引用自:
-[FirstViewController viewDidLoad] in FirstViewController.old:未找到架构 armv7 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
库文件包含在项目设置的“Link Binary with Libraries”中,因此它们肯定会编译到应用程序中。我这辈子都想不通为什么我会在这个问题上出错。
我尝试了几个不同的项目,并从网上下载了一些现有的项目文件并得到相同的错误。
这是我使用的构建脚本:
导出 PLATFORM="iPhoneOS" 导出 MIN_VERSION="4.0" 导出 MAX_VERSION="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" 导出 LDFLAGS="${COMMONFLAGS} -fPIC" 导出 CFLAGS="${COMMONFLAGS} -fvisibility=hidden" 导出 CXXFLAGS="${COMMONFLAGS} -fvisibility=hidden -fvisibility-inlines-hidden"
FFMPEG_LIBS="libavcodec libavdevice libavformat libavutil libswscale"
echo "正在构建 armv6..."
清理 ./configure \ --cpu=arm1176jzf-s\ --extra-cflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ --extra-ldflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION}'\ --启用交叉编译\ --拱=臂\ --目标操作系统=达尔文\ --cc=${CC}\ --sysroot=${SDKROOT} \ --prefix=已安装\ --禁用网络\ --禁用解码器\ --禁用多路复用器\ --禁用解复用器\ --禁用设备\ --禁用解析器\ --禁用编码器\ --禁用协议\ --禁用过滤器\ --禁用-bsfs \ --启用解码器=h264 \ --启用解码器=svq3 \ --启用-gpl \ --启用图片\ --disable-doc perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h make -j3
mkdir -p build.armv6 for i in ${FFMPEG_LIBS};做 cp ./$i/$i.a ./build.armv6/;完成
echo "正在构建 armv7..."
清理 ./configure \ --cpu=皮质-a8\ --extra-cflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ --extra-ldflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION}'\ --启用交叉编译\ --拱=臂\ --目标操作系统=达尔文\ --cc=${CC}\ --sysroot=${SDKROOT} \ --prefix=已安装\ --禁用网络\ --禁用解码器\ --禁用多路复用器\ --禁用解复用器\ --禁用设备\ --禁用解析器\ --禁用编码器\ --禁用协议\ --禁用过滤器\ --禁用-bsfs \ --启用解码器=h264 \ --启用解码器=svq3 \ --启用-gpl \ --启用图片\ --disable-doc perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h make -j3
mkdir -p build.armv7 for i in ${FFMPEG_LIBS};做 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;完成
进行安装
【问题讨论】: