首页 文章

为Android x86_64编译libav

提问于
浏览
2

我正在尝试为所有架构编译lib,包括64位 . 我创建的脚本适用于 armeabi, armeabi-v7a, arm64-v8a, and x86. 它为 mips 失败,并且也可能因为 mips64 而失败,但我不会编译.2956397_t编译 .

EDIT :x86也失败了 . 发布结束时的编译错误日志 .

这是脚本的作用:

  • 创建一个独立的工具链:就像一个魅力

  • 使用该工具链配置lib:

./configure --arch = x86_64 --cpu = x86_64 --cross-prefix = / some / path / usingLibAV / toolchains / x86_64 / bin / x86_64-linux-android- --target-os = android --sysroot = “/ some / path / Library / Android / ndk / platforms / android-21 / arch-x86_64 /” - extra-cflags =“ - O3 -fpic -DANDROID -DHAVE_SYS_UIO_H = 1 -fasm -Wno-psabi -fno-short -enums -fno-strict-aliasing -finline-limit = 300 -march = atom -ffast-math -msse3 -mfpmath = sse“--extra-ldflags =” - Wl,-rpath-link = / some / path / Library / android / ndk / platforms / android-21 / arch-x86_64 // usr / lib -L / some / path / Library / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib -nostdlib -lc -lm“--enable-shared --disable-symver

这似乎配置得很好,config.log不会触发任何错误,除了以下警告(无论如何我得到的每个架构):

WARNING: /some/path/Documents/usingLibAV/toolchains/x86_64/bin/x86_64-linux-android-pkg-config not found, library detection may fail.
  • compile:make -j 8.我得到正确生成的.so文件,但是如果我仔细查看日志,我最后会收到错误(抱歉我无法粘贴整个日志,它会很长):

CC libswscale / yuv2rgb.o AR libavformat / libavformat.a YASM libswscale / x86 / scale.o AR libavcodec / libavcodec.a AR libavresample / libavresample.a AR libavutil / libavutil.a CC avconv.o CC cmdutils.o CC avconv_opt . o CC avconv_filter.o CC avprobe.o HOSTCC doc / print_options.o AR libavdevice / libavdevice.a LD libavutil / libavutil.so.54 AR libavfilter / libavfilter.a / Volumes / diskE / some / path / usingLibAV / toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libc.so搜索c /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64- linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 //usr/lib/libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../ .. /../../x8 6_64-linux-android / bin / ld:警告:在搜索m / Volumes / diskE /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so some / path / usingLibAV / toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:warning :在搜索z LD libavresample / libavresample.so.2 / Volumes / diskE / some / path时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so /usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libc.so搜索c / Volumes / diskE / some / path / usingLibAV / toolchains / x86_64 / bin / .. /lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms /搜索m时,android-21 / arch-x86_64 // usr / lib / libm.so /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/ bin / ld:警告:在搜索m / Volumes / diskE / some / path / usingLibAV /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/某些/ pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libz.so搜索z LD libavcodec / libavcodec.so.56 HOSTLD doc / print_options GENTEXI doc / avoptions_format.texi GENTEXI doc / avoptions_codec .texi POD doc / avprobe.pod POD doc / avconv.pod MAN doc / avprobe.1 MAN doc / avconv.1 /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/ x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch -x86_64 // usr / lib / libc.so搜索c时/Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/ bin / ld:警告:在搜索m / Volumes / diskE / some / path / usingLibAV /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/某些/ pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/ gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 /arch-x86_64//usr/lib/libz.so搜索z LD libavformat / libavformat.so.56 /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64 -linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容在搜索c / Volumes / diskE / some / path / usingLibAV / toolchains / x86_64 / bin /时搜索/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libc.so . ./lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms /android-21/arch-x86_64//usr/lib/libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android /4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr /lib/libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../ .. /../x86_64-linux-android/bin/ld:警告:在搜索z LD时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so libavdevice / libavdevice.so.55 / Volumes / diskE / some / path / usingLibAV / toolchains / x86_64 / bin / ../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk /平台/ android-21 / arch-x86_64 // usr / lib / libc.so搜索c /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux- android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../ . ./../x86_64-linux-android/bin/ld:警告:在搜索m时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/ bin / ld:警告:跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so而se arching for z LD libswscale / libswscale.so.3 AR libswscale / libswscale.a /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/ . ./../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libc .so搜索c /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../ x86_64-linux-android / bin / ld:警告:在搜索m / Volumes / diskE /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so some / path / usingLibAV / toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:warning :在搜索m / Volumes / diskE / some / path / usingLibAV / toolchains / x86_64 / bin时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so /../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-androi d / bin / ld:警告:在搜索z LD libavfilter / libavfilter.so.5时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so卷/ diskE /一些/路径/ usingLibAV /工具链/ x86_64的/ bin中/../ lib中/ GCC / x86_64的Linux的功能的Android / 4.9 /../../../../ x86_64的Linux的功能的Android /箱/ ld:警告:在搜索c时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libc.so/Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/ bin / ld:警告:在搜索m / Volumes / diskE / some / path / usingLibAV /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so toolchains / x86_64 / bin /../ lib / gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/某些/ pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/ gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 /arch-x86_64//usr/lib/libz.so搜索z LD avconv LD avprobe /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android /4.9/../../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pat搜索c /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/ gcc / x86_64-linux-android / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 /arch-x86_64//usr/lib/libm.so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/ . ./../../../x86_64-linux-android/bin/ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libm .so搜索m /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../ x86_64-linux-android / bin / ld:警告:在搜索z libavcodec / libavcodec.so时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so :错误:未定义引用'__powidf2'colle2:错误:ld返回1退出状态make:* [avprobe]错误1使:等待未完成的工作.... / Volume /diskE / some / path / usingLibAV / toolchains / x86_64 / bin /../lib / gcc / x86_64-linux-anroid / 4.9 /../../../../ x86_64-linux-android / bin / ld:警告:跳过不兼容/ some / pathLibrary / Android / ndk / platforms / android-21 / arch-x86_64 // usr / lib / libc.so搜索c /Volumes/diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../ ../x86_64-linux-android/bin/ld:警告:在搜索m / Volumes时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so /diskE/some/path/usingLibAV/toolchains/x86_64/bin/../lib/gcc/x86_64-linux-android/4.9/../../../../x86_64-linux-android/bin/ ld:警告:在搜索m / Volumes / diskE / some / path / usingLibAV / toolchains /时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libm.so x86_64的/ bin中/../ LIB / GCC / x86_64的-Linux的机器人/ 4.9 /../../../../ x86_64的-Linux的和roid / bin / ld:警告:在搜索z libavcodec / libavcodec.so时跳过不兼容的/some/pathLibrary/Android/ndk/platforms/android-21/arch-x86_64//usr/lib/libz.so:error:undefined引用'__powidf2'collection2:错误:ld返回1退出状态make:** [avconv]错误1

在配置之后编译x86的错误:./ configure --arch = x86 --cpu = x86 --cross-prefix = / some / path / Documents / usingLibAV / toolchains / x86 / bin / i686-linux-android- - target-os = android --sysroot =“/ some / path / Library / Android / ndk / platforms / android-9 / arch-x86 /” - extra-cflags =“ - O3 -fpic -DANDROID -DHAVE_SYS_UIO_H = 1 - fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit = 300 -march = atom -ffast-math -msse3 -mfpmath = sse“--extra-ldflags =” - Wl,-rpath -link = / some / path / Library / Android / ndk / platforms / android-9 / arch-x86 // usr / lib -L / some / path / Library / Android / ndk / platforms / android-9 / arch-x86 // usr / lib -nostdlib -lc -lm“--enable-shared

^
CC  libswscale/x86/yuv2rgb.o
CC  libswscale/yuv2rgb.o
AR  libavformat/libavformat.a
YASM    libswscale/x86/scale.o
AR  libavcodec/libavcodec.a
AR  libavresample/libavresample.a
AR  libavutil/libavutil.a
CC  avconv.o
CC  cmdutils.o
CC  avconv_opt.o
CC  avconv_filter.o
CC  avprobe.o
HOSTCC  doc/print_options.o
AR  libavdevice/libavdevice.a
LD  libavutil/libavutil.so.54
AR  libavfilter/libavfilter.a
HOSTLD  doc/print_options
LD  libavresample/libavresample.so.2
GENTEXI doc/avoptions_format.texi
GENTEXI doc/avoptions_codec.texi
POD doc/avprobe.pod
POD doc/avconv.pod
LD  libavcodec/libavcodec.so.56
MAN doc/avprobe.1
MAN doc/avconv.1
LD  libavformat/libavformat.so.56
LD  libavdevice/libavdevice.so.55
LD  libswscale/libswscale.so.3
AR  libswscale/libswscale.a
LD  libavfilter/libavfilter.so.5
LD  avconv
LD  avprobe
libavdevice/libavdevice.so: error: undefined reference to '__divdi3'
libavdevice/libavdevice.so:libavdevice/libavdevice.so:  errorerror: undefined reference to ': __moddi3'
libavformatundefined reference to '__moddi3'
libavformat/libavformat.so/libavformat.so: error: undefined reference: error to : undefined'__udivdi3' reference to '__udivdi3'
libavformat/
libavformat/libavformat.so: errorlibavformat.so: error: : undefined reference undefined referenceto ' to '__umoddi3'
libavcodec/__umoddi3'
libavcodec.so: errorlibavcodec/: libavcodec.so: error: undefined reference to '__powidf2'
avconv.c:1434: error: undefined referenceundefined reference to '__powidf2 to '
'__divdi3'
avconv.c:1441: error: undefined reference to '__divdi3'
avconv.c:1434: error: undefined reference to '__divdi3'
avconv.c:1441: error: undefined reference to '__divdi3'
collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit status
make: *** [avprobe] Error 1
make: *** Waiting for unfinished jobs....
make: *** [avconv] Error 1

1 回答

  • 1

    你没有指定任何 --cross-prefix--cc ,这意味着它将使用你的主机系统编译器(OS X)来编译android - 这实际上只是在尝试链接到android libs时失败 .

    要实际按预期工作,请将 --cross-prefix=x86_64-linux-android- 添加到配置行 . (我假设你做了一些这样的事情,以使其适用于其他架构 . )

    编辑:我误读了,你实际上提供 --cross-prefix 就好了 .

    删除所有 --extra-cflags--extra-ldflags - 它们是多余的并且是冲突的 . 如果你有对于它们的任何特定的具体需要或情况,那么你可能会重新考虑添加一些单独的标志,但其中大多数只是多余的 . 在这种情况下,指向sysroot的lib目录的 -L 选项似乎导致了您的问题 - 通过 --sysroot 设置已经足够了, -L-Wl,-rpath-link 只是多余的 .

    一般来说,不要盲目地添加大量的选项 - 在编译器选项方面,更多的不是更好 . 只添加您具体了解并了解所需的内容 .

    如果您使用 --target-os=android ,则不需要 --disable-symver - 只有在将android添加为 --target-os 的单独值之前才需要该选项 .

相关问题