【问题标题】:Android NDK r6b Cross-compiling libfaac for android (linking libsupc++ problems)Android NDK r6b 为 android 交叉编译 libfaac(链接 libsupc++ 问题)
【发布时间】:2011-09-29 20:17:20
【问题描述】:

我正在尝试将 libfaac 交叉编译到 android 以与 ffmpeg 一起使用。我已经对 ffmpeg 进行了交叉编译,但 libfaac 让我非常头疼。

这是我用来编译 libfaac 的脚本:

ANDROID_API=android-3
export ANDROID_NDK=${HOME}/android-ndk
export ANDROID_SDK=${HOME}/android-sdk
SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-arm
ANDROID_BIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86/bin/
CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

export ARM_INC=$ANDROID_NDK/platforms/android-5/arch-arm/usr/include
export ARM_LIB=$ANDROID_NDK/platforms/android-5/arch-arm/usr/lib

CFLAGS=" -I$ARM_INC  -fPIC -Wall -Wextra -Wno-unused -Wno-multichar -mthumb-interwork -ffunction-sections -funwind-tables -fno-rtti -fstack-protector -fno-short-enums -DANDROID -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -Wa,--noexecstack -MMD -MP -MF"
LDFLAGS=" -nostdlib -Bdynamic -Wl,--gc-sections -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -L$ARM_LIB  $ARM_LIB/crtbegin_dynamic.o $ARM_LIB/crtend_android.o -Wl,--start-group -lc -lm -ldl -lgcc $ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi/libstdc++.a  $ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib/thumb/libsupc++.a -Wl,--end-group"

FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$HOME "

export CPPFLAGS="$CFLAGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export RANLIB="${CROSS_COMPILE}ranlib"
export AR="${CROSS_COMPILE}ar"

cd ../faac
./configure $FLAGS
make clean
make -j4 || exit 1
make install || exit 1

在 C++ 代码和交叉编译方面,我是一个非常初学者,并且我已经使用许多其他脚本作为参考来构建此脚本,因此我可能会做一些不必要或完全不正确的事情。

无论如何,我确实遇到了数百个错误:

undefined reference to `vtable for __cxxabiv1::__si_class_type_info'
undefined reference to `__cxa_end_cleanup'
undefined reference to `__cxa_throw'
undefined reference to `__gxx_personality_v0'

看来问题与我没有正确链接 libsupc++ 有关。

我试过做at this other stackoverflow question的人做的事情,但我不知道我做对了没有,我不熟悉链接过程。

我做错了什么?感谢您的帮助。

编辑: 事实证明我对 libsupc++ 导致问题可能有错,也可能没有错,configure.log 告诉我编译器无法创建可执行文件,但我无法弄清楚问题所在。

Here is a pastebin of the configure log

【问题讨论】:

  • 尝试将-lsupc++ 添加到LDFLAGS
  • 这是我尝试的第一件事,没有任何改变:/

标签: android android-ndk


【解决方案1】:

奇怪的是,问题实际上是 libsupc++ 以某种方式被多次链接,所以当我删除一些库并更改一些命令时,我得到了它的工作。这是我使用的编译脚本:

#!/bin/bash
ANDROID_API=android-3
export ANDROID_NDK=${HOME}/android-ndk
export ANDROID_SDK=${HOME}/android-sdk
SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-arm
ANDROID_BIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86/bin/
CROSS_COMPILE=${ANDROID_BIN}/arm-linux-androideabi-
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

export ARM_INC=$ANDROID_NDK/platforms/android-3/arch-arm/usr/include
export ARM_LIB=$ANDROID_NDK/platforms/android-3/arch-arm/usr/lib

CFLAGS=" -I$ARM_INC -fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__  -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID  -Wa,--noexecstack -MMD -MP "
LDFLAGS=" -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack  -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=$ARM_LIB,-dynamic-linker=/system/bin/linker -L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$ANDROID_NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/arm-linux-androideabi/lib -L$ARM_LIB  -lc -lgcc -lm -ldl  "
FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$HOME --enable-armv5e  "

export CPPFLAGS="$CFLAGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export CXX="${CROSS_COMPILE}g++ --sysroot=${SYSROOT}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${SYSROOT}"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export RANLIB="${CROSS_COMPILE}ranlib"
export AR="${CROSS_COMPILE}ar"

./configure $FLAGS
make clean
make -j4 || exit 1
make install || exit 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-28
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多