5
A
回答
0
我已經成功交叉編譯它沒有錯誤。我沒有測試過這個庫本身,但是可執行文件的例子似乎起作用,所以這是一個好兆頭!
我放在一起的腳本(主要歸功於this link中的寶貴信息)應該適用於許多其他使用Autotools的項目(如Aubio的依賴項)。
請注意,libsndfile
和libsamplerate
需要一個補丁才能成功進行交叉編譯,我相信這很難看,但它很有用。
要使用它,根據您的系統修改腳本(應該是非常簡單的,我希望),下載所有的依賴項(在build xxxxx
行中列出,您的版本可能會有所不同)與腳本並運行沒有參數的腳本。最後,所有內容都應位於$SYS_ROOT
目錄內。
好的,主盤是以下:
#!/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
嘗試使用第Ë最新的git:
$ git clone git://git.aubio.org/git/aubio
$ cd aubio/
$ ./waf configure build --with-target-platform ios
0
這裏是一個構建腳本爲我工作:
#! /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
,則默認爲工具鏈/ gcc版本4.6,我把它改爲4.9,因爲這是我最新的。 應該拉下它需要完成編譯
腳本的主要部分是好心由Aubio
的保羅BROSSIER作者提供的庫相關問題
- 1. Qt交叉編譯
- 2. 交叉編譯ldd
- 3. Beaglebone交叉編譯
- 4. Qt - 交叉編譯
- 5. Android交叉編譯
- 6. 交叉編譯libSDL
- 7. ARM交叉編譯
- 8. cmake交叉編譯
- 9. qt交叉編譯
- 10. 交叉編譯器
- 11. Microblaze交叉編譯
- 12. QTcreator交叉編譯
- 13. 交叉編譯stunnel
- 14. 交叉編譯QT
- 15. 交叉編譯php
- 16. 編譯GMP的交叉編譯問題
- 17. 交叉編譯,爲什麼「檢查我們是否正在交叉編譯...否」?
- 18. 交叉編譯ARM的ActiveMQ
- 19. 交叉編譯的手臂
- 20. Raspberry PI的交叉編譯
- 21. 交叉編譯iOS的libogg
- 22. RaspBerry Pi的交叉編譯
- 23. 交叉編譯Perl的ARM
- 24. GPU的Halide交叉編譯
- 25. 爲arm編譯交叉編譯e2fsprogs
- 26. 編譯警告 - ARM交叉編譯器
- 27. 交叉編譯器d-bus
- 28. 與mingw交叉編譯libtheora
- 29. 交叉編譯azure iot sdk
- 30. 交叉編譯Python擴展