Ошибка кросс-компиляции libfaac для Android NDK r8d на Mac OS X
Я пытаюсь кросс-компилировать libfaac для android на компьютере Mac и сталкиваюсь с некоторыми трудностями.
Настройка
- Android NDK r8d
- Mac OS X 10.7.5 (64-разрядная версия)
- libfaac 1.28
Я нашел эту ссылку: Android NDK r6b Кросс-компиляция libfaac для android (связывание проблем libsupC++) и использовал это в качестве отправной точки для моего скрипта и внес изменения для более поздних версий android ndk и процессоров (armv7a), которые я использую, Это мой сценарий:
#!/bin/bash
ANDROID_API=android-14
export ANDROID_NDK=${HOME}/Development/android-ndk-r8d
export ANDROID_SDK=${HOME}/Development/android-sdk-macosx
SYSROOT=$ANDROID_NDK/platforms/$ANDROID_API/arch-arm
ANDROID_BIN=$ANDROID_NDK/toolchains/arm-linux-androideabi-4.7/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-14/arch-arm/usr/include
export ARM_LIB=$ANDROID_NDK/platforms/android-14/arch-arm/usr/lib
DEST=${HOME}/Downloads/faac-1.28/build
CFLAGS=" -I$ARM_INC -fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-psabi -march=armv7-a -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,-L$ANDROID_NDK/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L$ANDROID_NDK/toolchains/arm-linux-androideabi-4.7/prebuilt/darwin-x86/arm-linux-androideabi/lib -L$ARM_LIB -lc -lgcc -lm -ldl "
FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$DEST --enable-armv7a "
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
Эта проблема
К сожалению, скрипт не работает должным образом. Я получаю configure: error: C compiler cannot create executables
ошибка и тому config.log
Файл показывает следующий преступник:
configure:2767: $? = 1
configure:2790: checking for C compiler default output file name
configure:2817: /Users/jannon/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/*-x86/bin//arm-linux-androideabi-gcc --sysroot=/Users/jannon/Development/android-ndk-r8d/platforms/android-14/arch-arm -I/Users/jannon/Development/android-ndk-r8d/platforms/android-14/arch-arm/usr/include -fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-psabi -march=armv7-a -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP -I/Users/jannon/Development/android-ndk-r8d/platforms/android-14/arch-arm/usr/include -fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-psabi -march=armv7-a -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP -nostdlib -Bdynamic -Wl,--whole-archive -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,nocopyreloc -Wl,-soname,/system/lib/libz.so -Wl,-rpath-link=/Users/jannon/Development/android-ndk-r8d/platforms/android-14/arch-arm/usr/lib,-L/Users/jannon/Development/android-ndk-r8d/sources/cxx-stl/gnu-libstdc++/libs/armeabi -L/Users/jannon/Development/android-ndk-r8d/toolchains/arm-linux-androideabi-4.7/prebuilt/darwin-x86/arm-linux-androideabi/lib -L/Users/jannon/Development/android-ndk-r8d/platforms/android-14/arch-arm/usr/lib -lc -lgcc -lm -ldl conftest.c >&5
/s/ndk-toolchain/src/build/../gcc/gcc-4.7/libgcc/config/arm/linux-atomic-64bit.c:59: error: undefined reference to '__write'
collect2: error: ld returned 1 exit status
configure:2820: $? = 1
configure:2858: result:
configure: failed program was:
| /* confdefs.h. */
| #define PACKAGE_NAME "FAAC"
| #define PACKAGE_TARNAME "faac"
| #define PACKAGE_VERSION "1.28"
| #define PACKAGE_STRING "FAAC 1.28"
| #define PACKAGE_BUGREPORT "faac-dev@lists.sourceforge.net"
| #define PACKAGE "faac"
| #define VERSION "1.28"
| /* end confdefs.h. */
|
| int
| main ()
| {
|
| ;
| return 0;
| }
configure:2865: error: C compiler cannot create executables
Решение?
Я не очень хорошо разбираюсь во всех тонкостях механизма компиляции / компоновки c / C++, поэтому я действительно не знаю, почему __write
функция не определена. Я полагаю, что может быть какая-то проблема с используемыми мной флагами компилятора, компоновщика или конфигурации, но, возможно, что-то не так с общей настройкой моей среды. Однако я могу успешно кросс-компилировать другие проекты (libx264, libmp3lame, ffmpeg).
Поэтому я ищу указатели, чтобы заставить это работать, или любую другую установку, которая будет скомпилирована libfaac для Android (armv7a)
Спасибо!