2011-09-29 61 views
2

我試圖交叉編譯libfaac到android與ffmpeg一起使用。我已經得到了ffmpeg的交叉編譯,但libfaac給我帶來了很大的麻煩。Android NDK r6b爲Android交叉編譯libfaac(鏈接libsupC++問題)

這是我使用的編譯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

+0

只要嘗試添加'-lsupC++'到'LDFLAGS'。 –

+0

這是我嘗試的第一件事,不會改變任何事情:/ – joebobfrank

回答

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