2011-07-22 21 views

Trả lời

0

Tôi đã thành công trong việc biên dịch chéo nó mà không có lỗi. Tôi chưa tự kiểm tra thư viện, nhưng các ví dụ thực thi dường như hoạt động, vì vậy đó là một dấu hiệu tốt!

Kịch bản tôi đã đặt cùng nhau (phần lớn nhờ vào thông tin vô giá trong this link) sẽ hoạt động đối với nhiều dự án khác sử dụng Autotools (như phụ thuộc của Aubio).

Lưu ý rằng cả hai libsndfilelibsamplerate cần bản vá để biên dịch chéo thành công, điều mà tôi chắc chắn là xấu, nhưng nó hoạt động.

Để sử dụng, sửa đổi tập lệnh theo hệ thống của bạn (nên khá đơn giản, tôi hy vọng), tải xuống tất cả các phụ thuộc (được liệt kê trong dòng build xxxxx ở cuối, các phiên bản của bạn có thể khác nhau) trong cùng thư mục với kịch bản và chạy kịch bản mà không có đối số. Cuối cùng, mọi thứ phải nằm trong thư mục $SYS_ROOT.

Được rồi, các món ăn chính là dưới đây:

#!/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

--- 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

--- 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

Hãy thử sử dụng thứ e mới nhất git:

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

Dưới đây là một kịch bản xây dựng mà làm việc cho tôi:

#! /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 

nó sẽ mặc định toolchain/gcc phiên bản 4.6, tôi đã thay đổi này để 4.9 như là mới nhất tôi có . cần kéo xuống các thư viện cần hoàn thành để biên soạn

phần chính của tập lệnh được cung cấp bởi tác giả Paul Brossier của Aubio

Các vấn đề liên quan