2011-07-22 9 views

Respuesta

0

He tenido éxito en la compilación cruzada sin errores. No he probado la biblioteca en sí, pero los ejecutables de ejemplo parecen funcionar, ¡eso es una buena señal!

La secuencia de comandos que he reunido (en gran parte gracias a la información inestimable en this link) debería funcionar para muchos otros proyectos que usan Autotools (como las dependencias de Aubio).

Tenga en cuenta que tanto libsndfile como libsamplerate necesitan un parche para realizar una compilación cruzada satisfactoriamente, lo que estoy seguro es feo, pero funciona.

Para usarlo, modifique la secuencia de comandos de acuerdo con su sistema (debería ser bastante sencillo, espero), descargue todas las dependencias (enumeradas en las líneas build xxxxx al final, sus versiones pueden variar) en el mismo directorio que script y ejecutar el script sin argumentos. Al final, todo debería estar dentro del directorio $SYS_ROOT.

bien, el plato principal es a continuación:

#!/bin/bash 

# Taken and improved from : 
# http://cmumobileapps.com/2011/08/31/compiling-open-source-libraries-with-android-ndk-part-2 

# The designation for the host, usually "linux-x86" for standard linuxes, and 
# "darwin-x86" for OSX. 
HOST="linux-x86" 

# The target architecture. Here we're compiling for ARM using GCC 4.7 and 
# platform version 14. 
TARGET_ARCH="arm" 
TARGET_HOST="arm-eabi" 
TARGET_TOOLCHAIN="arm-linux-androideabi" 
TARGET_GCC_VERSION="4.7" 
TARGET_NDK_VERSION="14" 

# Add the toolchain to the path to be able to use the ARM compiler. 
export PATH="$ANDROID_NDK/toolchains/$TARGET_TOOLCHAIN-$TARGET_GCC_VERSION/prebuilt/$HOST/bin:$PATH" 

# Where to find the platform-specific files? 
export PLATFORM="$ANDROID_NDK/platforms/android-$TARGET_NDK_VERSION/arch-$TARGET_ARCH/" 

# Where to copy the platform-specific files? 
# Will be used later as the target system root for cross-compilation. 
export SYS_ROOT="`pwd`/sysroot/" 

# Executable names for the compilation toolchain 
export CC="$TARGET_TOOLCHAIN-gcc --sysroot=$SYS_ROOT" 
export CXX="$TARGET_TOOLCHAIN-g++ --sysroot=$SYS_ROOT" 
export CPP="$TARGET_TOOLCHAIN-cpp --sysroot=$SYS_ROOT" 
export LD="$TARGET_TOOLCHAIN-ld" 
export AR="$TARGET_TOOLCHAIN-ar" 
export RANLIB="$TARGET_TOOLCHAIN-ranlib" 
export STRIP="$TARGET_TOOLCHAIN-strip" 

# Add the STLPort library to the search path (needed for C++ files) 
export CXXFLAGS="-I$ANDROID_NDK/sources/cxx-stl/stlport/stlport/" 
export LDFLAGS="-L$ANDROID_NDK/sources/cxx-stl/stlport/libs/armeabi/ -lstlport_static" 

# Where to install the cross-compiled packages? 
# When running `make install`, all the files (executables, libraries, 
# documentation,...) will be in this directory. 
export INSTALL_DIR="$SYS_ROOT/usr/" 

# Where will pkg-config look for information about installed packages? 
export PKG_CONFIG_LIBDIR="$SYS_ROOT/usr/lib/pkgconfig/" 

################# 
# Configuration # 
################# 

# If the sysroot doesn't exist, create it and copy all the files from the NDK 
# distribution. 
if [[ ! -e "$SYS_ROOT" ]]; then 
    echo "Creating sysroot [$SYS_ROOT]" 
    cp -Rf "$PLATFORM" "$SYS_ROOT" || exit 2 
fi 

# If it doesn't exist, create the installation directory. 
if [[ ! -e "$INSTALL_DIR" ]]; then 
    echo "Creating installation directory [$INSTALL_DIR]" 
    mkdir -p $INSTALL_DIR || exit 3 
fi 

############### 
# Compilation # 
############### 

build() { 
    # Change directory to the package directory (in argument) 
    echo "Building $1" 
    pushd $1 

    # Clean things up (optional) 
    make clean 1>/dev/null 2>&1 

    # Configure the package 
    ./configure --host=$TARGET_HOST LIBS="-lc -lgcc" --prefix=$INSTALL_DIR || exit 1 

    # Compile 
    make || exit 1 

    # Install in $INSTALL_DIR 
    make install || exit 1 

    # Return to the original directory 
    popd 
} 

# Build all things 
build libogg-1.3.0 
build libvorbis-1.3.3 
build flac-1.2.1 
build libsndfile-1.0.25-patch 
build libsamplerate-0.1.8-patch 
build fftw-3.3.3 
build aubio-0.3.2 

libsndfile parche

--- libsndfile-1.0.25/programs/sndfile-play.c 2012-12-31 17:03:34.289908113 +0100 
+++ libsndfile-1.0.25-patch/programs/sndfile-play.c 2012-12-31 17:04:05.326412364 +0100 
@@ -55,7 +55,7 @@ 
#if defined (__linux__) || defined (__FreeBSD_kernel__) || defined (__FreeBSD__) 
    #include <fcntl.h> 
    #include <sys/ioctl.h> 
- #include <sys/soundcard.h> 
+ #include <linux/soundcard.h> 

#elif (defined (__MACH__) && defined (__APPLE__)) 
    #include <Carbon.h> 
--- libsndfile-1.0.25/src/sndfile.c 2012-12-31 17:03:34.343241171 +0100 
+++ libsndfile-1.0.25-patch/src/sndfile.c 2013-01-01 18:53:37.436544846 +0100 
@@ -309,7 +309,7 @@ 
{ SF_PRIVATE *psf ; 

    /* Ultimate sanity check. */ 
- assert (sizeof (sf_count_t) == 8) ; 
+ /* assert (sizeof (sf_count_t) == 8) ; */ 

    if ((psf = calloc (1, sizeof (SF_PRIVATE))) == NULL) 
    { sf_errno = SFE_MALLOC_FAILED ; 

libsamplerate parche

--- libsamplerate-0.1.8/examples/audio_out.c 2011-07-13 01:57:31.000000000 +0200 
+++ libsamplerate-0.1.8-patch/examples/audio_out.c 2013-01-01 17:24:58.257526888 +0100 
@@ -44,7 +44,7 @@ 

#include <fcntl.h> 
#include <sys/ioctl.h> 
-#include <sys/soundcard.h> 
+#include <linux/soundcard.h> 

#define LINUX_MAGIC  MAKE_MAGIC ('L', 'i', 'n', 'u', 'x', 'O', 'S', 'S') 
1

Trate de usar º e última git:

$ git clone git://git.aubio.org/git/aubio 
$ cd aubio/ 
$ ./waf configure build --with-target-platform ios 
0

Aquí es un script de construcción que trabajó para mí:

#! /bin/sh 

""" 
build the toold chain home with: 
build/tools/make-standalone-toolchain.sh --platform=android-9 --install-dir=../android-9-toolchain 
""" 

NDK_HOME=~/dev/SDKs/android-9-toolchain 
set -x 
set -e 
export CC=$NDK_HOME/bin/arm-linux-androideabi-gcc 
export CFLAGS=-I$NDK_HOME/include 
export LDFLAGS="-L$NDK_HOME/lib" 
export AR=$NDK_HOME/bin/arm-linux-androideabi-ar 

./waf distclean 
./waf configure --with-target-platform android --disable-jack 
./waf build --verbose 
./waf install --destdir dist-android 

se usará por defecto cadena de herramientas/gcc versión 4.6, he cambiado esto a 4.9 ya que es la última que tengo . debe tirar hacia abajo las bibliotecas que necesita para terminar la compilación

la parte principal de la secuencia de comandos fue proporcionado amablemente por Paul Brossier autor de Aubio

Cuestiones relacionadas