Подтвердить что ты не робот

Как я могу скомпилировать хромую как статическую библиотеку (.a) для armv6 и armv7 iPhone?

LAME (http://lame.sourceforge.net/) - это библиотека, написанная на языке c. Он может конвертировать звуковые файлы PCM в файлы MP3. Я использую его для преобразования звуковых файлов в MP3 файлы на iPhone. Исходные звуковые файлы PCM записываются микрофоном.

Чтобы включить LAME в мой проект XCode, мне нужно скомпилировать LAME для 3 статических библиотек (.a), для i386 (IOS Simulator), armv6 и armv7.

После большого поиска я успешно выполнил статическую библиотеку для i368-версии (iOS Simulator). Вот команды:

./configure \
    CFLAGS="-isysroot  /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" \
    CC="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386" \
    --prefix=/Volumes/Data/test/i386 \
    --host="arm-apple-darwin9"

make && make install

Проблема заключается в том, что я не могу скомпилировать для armv6 и armv7. Я пробовал эти команды, но сообщал об ошибке. Есть ли у кого-нибудь решения?

./configure \
    CFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" \
    CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6" \
    --prefix=/Volumes/Data/test/arm6 \
    --host="arm-apple-darwin9"

make && make install

Ошибка:

console.c:25:21: error: curses.h: No such file or directory
console.c:27:20: error: term.h: No such file or directory
console.c: In function ‘get_termcap_string’:
console.c:92: warning: implicit declaration of function ‘tgetstr’
console.c:92: warning: assignment makes pointer from integer without a cast
console.c: In function ‘get_termcap_number’:
console.c:102: warning: implicit declaration of function ‘tgetnum’
console.c: In function ‘apply_termcap_settings’:
console.c:115: warning: implicit declaration of function ‘tgetent’
make[2]: *** [console.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Когда я устанавливаю ncurses, он сообщил об этом:

../curses.h:60:25: error: ncurses_dll.h: No such file or directory
In file included from console.c:25:
../curses.h:250: warning: return type defaults to ‘int’
../curses.h: In function ‘NCURSES_EXPORT_VAR’:
../curses.h:250: error: expected declaration specifiers before ‘acs_map’
../curses.h:340: error: storage class specified for parameter ‘SCREEN’
../curses.h:341: error: storage class specified for parameter ‘WINDOW’
../curses.h:343: error: storage class specified for parameter ‘attr_t’
../curses.h:388: warning: empty declaration
../curses.h:401: error: expected specifier-qualifier-list before ‘attr_t’
../curses.h:443: warning: empty declaration
../curses.h:542: error: storage class specified for parameter ‘NCURSES_OUTC’
../curses.h:551: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addch’
../curses.h:552: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addchnstr’
../curses.h:553: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addchstr’
../curses.h:554: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addnstr’

Может ли кто-нибудь дать мне способ скомпилировать LAME в статическую библиотеку (.a) для armv6 и armv7?

4b9b3361

Ответ 1

Вам не хватает нескольких шагов. Прежде всего, вы не хотите создавать интерфейс, потому что вы сможете использовать LAME только как библиотеку. Вам также необходимо создать библиотеку статически, иначе вы не сможете ее создать в свой проект.

В принципе, вам нужно настроить исходное дерево и скомпилировать его четыре раза, один раз для симулятора (i686), iPhone (armv6), iPad (armv7) и iPhone 5 (armv7s), затем сгруппировать файлы .a вместе в универсальная библиотека. Компилятор Xcode будет сортировать все остальное для вас, когда вы скомпилируете оставшуюся часть вашего проекта.

Я использовал эту оболочку script для создания универсального файла libmp3lame.a. Обратите внимание, что это использует пути Xcode 4.3 и компиляторы iOS 5.1.

#!/bin/bash

SDK_VERSION="5.1"

mkdir build

function build_lame()
{
    make distclean

    ./configure \
        CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \
        CC="/Applications/Xcode.app/Contents/Developer/Platforms/${SDK}.platform/Developer/usr/bin/gcc -arch ${PLATFORM}" \
        --prefix=/Users/mcrute/Desktop/lame \
        --host="arm-apple-darwin9" \
        --disable-shared \
        --enable-static \
        --disable-decoder \
        --disable-frontend

    make
    cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a"
}

PLATFORM="i686"
SDK="iPhoneSimulator"
build_lame

PLATFORM="armv6"
SDK="iPhoneOS"
build_lame

PLATFORM="armv7"
build_lame

PLATFORM="armv7s"
build_lame

lipo -create build/* -output build/libmp3lame.a

Возьмите файл libmp3lame.a из. /build вместе с файлом lame.h из каталога include и поместите его в свой проект Xcode, и вы должны быть готовы использовать хромой либо в симуляторе, либо в реальном устройстве.

Ответ 2

Для Xcode 6.1, iOS SDK 8.1, я использую ниже shell script:

Поддержка armv7, arm64, i686 и x86_64

#!/bin/bash

DEVELOPER=`xcode-select -print-path`

SDK_VERSION="8.1"

LAMEDIR="/Users/zuyuanzhou/Downloads/lame-3.99.5"

mkdir build

function build_lame()
{
make distclean

./configure \
CFLAGS="-isysroot ${DEVELOPER}/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \
CC="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch ${PLATFORM} -miphoneos-version-min=7.0 " \
CPP="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp" \
--prefix="$LAMEDIR" \
--host="$HOST" \
--disable-shared \
--enable-static \
--disable-decoder \
--disable-frontend

make -j4
cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a"
}


PLATFORM="i686"
SDK="iPhoneSimulator"
HOST="i686-apple-darwin14.1.0"
build_lame

PLATFORM="x86_64"
build_lame

PLATFORM="armv7"
SDK="iPhoneOS"
HOST="arm-apple-darwin9"
build_lame

PLATFORM="arm64"
build_lame

lipo -create build/* -output build/libmp3lame.a

Ответ 3

Спасибо @mcrute за его отличный ответ и обновление XCode 5 Я обновил script. Надеюсь, это полезно для новых пользователей.

ПРИМЕЧАНИЕ. Не забудьте обновить SDK_VERSION на основе вашей установки системы.

#!/bin/bash

DEVELOPER=`xcode-select -print-path`

SDK_VERSION="7.1"

mkdir build

function build_lame()
{
    make distclean

    ./configure \
        CFLAGS="-isysroot ${DEVELOPER}/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \
        CC="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch ${PLATFORM} -miphoneos-version-min=7.0 " \
        --prefix=/Users/mcrute/Desktop/lame \
        --host="arm-apple-darwin9" \
        --disable-shared \
        --enable-static \
        --disable-decoder \
        --disable-frontend

    make -j4
    cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a"
}

PLATFORM="i686"
SDK="iPhoneSimulator"
build_lame

PLATFORM="armv6"
SDK="iPhoneOS"
build_lame

PLATFORM="armv7"
build_lame

PLATFORM="armv7s"
build_lame

lipo -create build/* -output build/libmp3lame.a