Как связать сторонние библиотеки, такие как fftw3 и sndfile, с проектом iPhone в Xcode? - PullRequest
1 голос
/ 28 августа 2010

Я пытаюсь связать сторонние библиотеки, такие как fftw3 и sndfile, с моим проектом iPhone в Xcode3.2.Я установил его в обычном проекте Mac, установив «Путь поиска заголовка» в «/ usr / local / include» и «Другие флаги компоновщика» в «-lfftw3 -lsndfile» в конфигурации сборки проекта.Тем не менее, я получил сообщение «библиотека не найдена для -lfftw3» с сообщением об ошибке «Код выхода 1», когда я попытался встроить его в проект iPhone с использованием тех же настроек.

Разве Apple не позволяет это на iPhone?Есть ли способ обойти это?

Ответы [ 9 ]

6 голосов
/ 03 декабря 2012

Я изменил скрипт Epskampie для IOS 5.0+Используется с fftw3.3.3 в OS X 10.7 с IOS SDK 6.0 и MacOSX SDK 10.8

#!/bin/sh

# build_ios5.sh
# build an arm / i386 / x86_64 lib of fftw3
# make sure to check that all the paths used in this script exist on your system
#
# adopted from:
# http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
# changed by Nickun
# original:
# /3891135/kak-svyazat-storonnie-biblioteki-takie-kak-fftw3-i-sndfile-s-proektom-iphone-v-xcode


# make sure we start out clean
make distclean

# this is the folder where the results of our efforts will end up:
export RESULT_DIR=ios-library

# Select toolchains folder
export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
# Select the desired iPhone SDK
export DEVROOT_IOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS6.0.sdk
# Select the OSX SDK
export DEVROOT_OSX=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX10.8.sdk

# ------------------------ armv7---------------------------
# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --enable-float --enable-neon

make -j2

# Copy the ARM library to a temporary location
mkdir $RESULT_DIR
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7.a

# Copy the header file too, just for convenience
cp api/fftw3.h $RESULT_DIR/fftw3.h

# ------------------------ armv7s---------------------------
# Do it all again for i386
make distclean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7s -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --enable-float --enable-neon

make -j2

# Copy the ARM library to a temporary location
mkdir $RESULT_DIR
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7s.a


# ------------------------ i386 ---------------------------
# Do it all again for i386
make distclean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

export CPPFLAGS="-I$SDKROOT_OSX/usr/include/"
export CFLAGS="$CPPFLAGS -arch i386 -no-cpp-precomp -mmacosx-version-min=10.7 -isysroot $SDKROOT_OSX"
export LD="$XCODE_TOOLCHAINS/usr/bin/ld"
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch i386 -std=gnu++11 -stdlib=libc++"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch i386 -std=gnu99"
export CXXFLAGS="$CFLAGS"

# TODO: error checking
./configure --enable-float
make -j2

# Copy the FAT native library to the temporary location
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_i386.a

# ------------------------ x86_64 ---------------------------
# Do it all again for x86_64
make distclean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

export CPPFLAGS="-I$SDKROOT_OSX/usr/include/"
export CFLAGS="$CPPFLAGS -arch x86_64 -no-cpp-precomp -mmacosx-version-min=10.7 -isysroot $SDKROOT_OSX"
export LD="$XCODE_TOOLCHAINS/usr/bin/ld"
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch x86_64 -std=gnu++11 -stdlib=libc++"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch x86_64 -std=gnu99"
export CXXFLAGS="$CFLAGS"

# TODO: error checking
./configure --enable-float
make -j2

# Copy the FAT native library to the temporary location
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_x86_64.a



# Create fat lib by combining the two versions
lipo -arch armv7 $RESULT_DIR/libfftw3f_armv7.a -arch armv7s $RESULT_DIR/libfftw3f_armv7s.a -arch i386 $RESULT_DIR/libfftw3f_i386.a -arch x86_64 $RESULT_DIR/libfftw3f_x86_64.a -create -output $RESULT_DIR/libfftw3f.a

# Remove intermediate binaries
#rm $RESULT_DIR/libfftw3_armv7.a
#rm $RESULT_DIR/libfftw3_i386.a
#rm $RESULT_DIR/libfftw3_x86_64.a

# Unset used environment variables
unset CPPFLAGS CFLAGS CPP LD LDFLAGS CXX CXXFLAGS
5 голосов
/ 04 октября 2010

Для компиляции fftw3 для использования в проекте iOS я адаптировал скрипт, размещенный здесь: http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884

Используется с fftw3.2.2 на OS X 10.6 с iOs SDK 3.2

#!/bin/sh

# build_iphone.sh
# build an arm / i386 lib of fftw3
# make sure to check that all the paths used in this script exist on your system
#
# adopted from:
# http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884


# make sure we start out clean
make distclean

# this is the folder where the results of our efforts will end up:
export RESULT_DIR=ios-library

# Select the desired iPhone SDK
export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT=$DEVROOT/SDKs/iPhoneOS3.2.sdk

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.0.1/include/ -I$SDKROOT/usr/include/ -miphoneos-version-min=2.2"
export CFLAGS="$CPPFLAGS -arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT"
export CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
./configure CC=$DEVROOT/usr/bin/arm-apple-darwin10-gcc-4.0.1 LD=$DEVROOT/usr/bin/ld --host=arm-apple-darwin

make -j4

# Copy the ARM library to a temporary location
mkdir $RESULT_DIR
cp .libs/libfftw3.a $RESULT_DIR/libfftw3_arm.a

# Copy the header file too, just for convenience
cp api/fftw3.h ios-library/fftw3.h

# Do it all again for i386
make distclean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LDFLAGS CXXFLAGS DEVROOT SDKROOT

export DEVROOT=/Developer
export SDKROOT=$DEVROOT/SDKs/MacOSX10.6.sdk

export CPPFLAGS="-I$SDKROOT/usr/lib/gcc/i686-apple-darwin10/4.0.1/include/ -I$SDKROOT/usr/include/ -mmacosx-version-min=10.5"
export CFLAGS="$CPPFLAGS -pipe -no-cpp-precomp -isysroot $SDKROOT -arch i386"
export CPP="$DEVROOT/usr/bin/cpp $CPPFLAGS"
export CXXFLAGS="$CFLAGS"

# TODO: error checking
./configure
make -j4

# Copy the native library to the temporary location
cp .libs/libfftw3.a $RESULT_DIR/libfftw3_386.a

# Create fat lib by combining the two versions
lipo -arch arm $RESULT_DIR/libfftw3_arm.a -arch i386 $RESULT_DIR/libfftw3_386.a -create -output $RESULT_DIR/libfftw3.a

# Remove intermediate binaries
rm $RESULT_DIR/libfftw3_arm.a
rm $RESULT_DIR/libfftw3_386.a

# Unset used environment variables
unset CPPFLAGS CFLAGS CPP LDFLAGS CPP CXXFLAGS DEVROOT SDKROOT

Запустите этот скрипт из каталога, содержащего fftw3.Необходимые файлы должны оказаться в папке ios-library.

2 голосов
/ 25 апреля 2014

Я изменил скрипт Никуна для Mac OS X 10.9.2, iOS 7.1, fftw-3.3.4.Он также добавляет срез arm64 в толстый файл.Вот скрипт ->

#!/bin/sh

# build_lipo.sh
# build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
# make sure to check that all the paths used in this script exist on your system
#
# adopted from:
# http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
# changed by Adam
# original: by Nickun
# /3891135/kak-svyazat-storonnie-biblioteki-takie-kak-fftw3-i-sndfile-s-proektom-iphone-v-xcode

# this is the folder where the results of our efforts will end up:
export RESULT_DIR=ios-library

# Select toolchains folder
export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
# Select the desired iPhone SDK
export DEVROOT_IOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS7.1.sdk
# Select the OSX SDK
export DEVROOT_OSX=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX10.9.2.sdk

# ------------------------ i386 ---------------------------
# Do it for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

export CFLAGS="-arch i386"

# TODO: error checking
./configure --enable-float --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
make -j2

# Copy the FAT native library to a temporary location
mkdir $RESULT_DIR
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_i386.a

# ------------------------ x86_64 ---------------------------
# Do it all again for x86_64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# TODO: error checking
./configure --enable-float
make -j2

# Copy the FAT native library to the temporary location
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_x86_64.a

# ------------------------ armv7---------------------------
# Do it all again for armv7
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon

make -j2

cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7.a

# Copy the header file too, just for convenience
cp api/fftw3.h $RESULT_DIR/fftw3.h

# ------------------------ armv7s---------------------------
# Do it all again for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7s -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon

make -j2

# Copy the ARM library to a temporary location
cp .libs/libfftw3f.a $RESULT_DIR/libfftw3f_armv7s.a

# ------------------------ arm64 ---------------------------
# Do it all again for arm64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch arm64 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin --enable-float --enable-neon

make -j2

# Copy the ARM library to a temporary location
cp .libs/libfftw3f.a ios-library/libfftw3f_arm64.a


# Create fat lib by combining the two versions
lipo -arch armv7 $RESULT_DIR/libfftw3f_armv7.a -arch armv7s $RESULT_DIR/libfftw3f_armv7s.a -arch i386 $RESULT_DIR/libfftw3f_i386.a -arch x86_64 $RESULT_DIR/libfftw3f_x86_64.a -arch arm64 $RESULT_DIR/libfftw3f_arm64.a -create -output $RESULT_DIR/libfftw3f.a

# Remove intermediate binaries
#rm $RESULT_DIR/libfftw3_armv7.a
#rm $RESULT_DIR/libfftw3_i386.a
#rm $RESULT_DIR/libfftw3_x86_64.a

# Unset used environment variables
unset CPPFLAGS CFLAGS CPP LD LDFLAGS CXX CXXFLAGS
2 голосов
/ 28 августа 2010

Вам необходимо собрать библиотеки как универсальные статические библиотеки.Процесс варьируется от библиотеки к библиотеке, но обычно он выглядит примерно так:

  1. сборка библиотеки как статической библиотеки для разных платформ (по крайней мере, armv6 и i386)
  2. uselipo для создания универсальной библиотеки из отдельных статических библиотек, построенных выше
  3. перетащите универсальную библиотеку в ваш проект xcode
  4. перетащите файлы заголовков в ваш проект xcode

Шаг 1 обычно самый сложный, поскольку во многих библиотеках используются разные процедуры сборки.Обычно это делается путем установки соответствующих флагов компилятора для использования iphone SDK вместо общесистемного компилятора.

1 голос
/ 10 апреля 2019

Основано на ответе 10mitri, работающем для fftw-3.3.8, iOS SDK 12.2, XCode 10.2 .

#!/bin/sh

export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain

export OUTPUT_DIR=ios-libs

mkdir -p $OUTPUT_DIR
rm -rf $OUTPUT_DIR/*

build_target()
{
    PLATFORM=$1
    ARCH=$2
    CONFIGURE_HOST=$3

    IOS_SDKROOT=`xcrun --sdk $PLATFORM --show-sdk-path`

    export CPPFLAGS="-I$IOS_SDKROOT/usr/include/"
    export CFLAGS="$CPPFLAGS -O3 -arch $ARCH -miphoneos-version-min=8.0 -isysroot $IOS_SDKROOT"
    export LD=$XCODE_TOOLCHAINS/usr/bin/ld
    export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"
    export CC="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"

    echo -----------------------------------------
    echo ---- BUILD TARGET
    echo ---- PLATFORM : $PLATFORM
    echo ---- ARCH : $ARCH
    echo ---- HOST : $CONFIGURE_HOST
    echo -----------------------------------------

    sleep 3

    make clean

    ./configure --host=$CONFIGURE_HOST

    make -j4

    # Copy the lib
    cp .libs/libfftw3.a $OUTPUT_DIR/libfftw3_$ARCH.a

    unset CPPFLAGS CFLAGS LD CXX CC
}

build_target "iphoneos" "armv7" "arm-apple-darwin"
build_target "iphoneos" "armv7s" "arm-apple-darwin"
build_target "iphoneos" "arm64" "arm-apple-darwin"
# build_target "iphonesimulator" "x86_64" "x86_64-apple-darwin"
build_target "iphonesimulator" "i386" "i386-apple-darwin"

# Make fat lib
lipo -arch armv7 $OUTPUT_DIR/libfftw3_armv7.a\
     -arch armv7s $OUTPUT_DIR/libfftw3_armv7s.a\
     -arch arm64 $OUTPUT_DIR/libfftw3_arm64.a\
     -arch i386 $OUTPUT_DIR/libfftw3_i386.a\
     -create -output $OUTPUT_DIR/libfftw3_ios.a

# Copy the header file too, just for convenience
cp api/fftw3.h $OUTPUT_DIR/fftw3.h

echo "done"
1 голос
/ 10 апреля 2017

Сборка FFTW3 для iOS:

Вот скрипт для создания файлов .h и .a для разных архитектур iOS (устройство, симулятор, ...)

Наслаждайся этим!

#!/bin/sh

# build for iOS / Mac
# changed by 10mitri
# original:
# /3891135/kak-svyazat-storonnie-biblioteki-takie-kak-fftw3-i-sndfile-s-proektom-iphone-v-xcode


# this is the folder where the libs will be generated
export OUTPUT_DIR=ios-libs

# Select toolchains folder
export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain


#$(CURRENT_ARCH)

build_target()
{
PLATFORM=$1
ARCH=$2
SDK_VERSION=$3
CONFIGURE_HOST=$4
IOS_DEPLOYMENT_TARGET=$5

export SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/$PLATFORM.platform/Developer/SDKs/$PLATFORM$SDK_VERSION.sdk

export CPPFLAGS="-I$SDKROOT/usr/include/"
export CFLAGS="$CPPFLAGS -arch $ARCH -isysroot $SDKROOT"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -arch $ARCH -fembed-bitcode"

echo ---------------------------------------------------
echo ---------------------------------------------------
echo ---------------------------------------------------
echo -------------- BUILD TARGET
echo -------------- PLATFORM : $PLATFORM
echo -------------- ARCH : $ARCH
echo -------------- SDK_VERSION : $SDK_VERSION
echo -------------- HOST : $CONFIGURE_HOST
echo -------------- MIN iOS : $IOS_DEPLOYMENT_TARGET
echo -------------- SDK PATH : $SDKROOT
echo ---------------------------------------------------
echo ---------------------------------------------------
echo ---------------------------------------------------

sleep 3

make clean

./configure --host=$CONFIGURE_HOST

make -j4

mkdir $OUTPUT_DIR/$ARCH

# Copy the lib
cp .libs/libfftw3.a $OUTPUT_DIR/$ARCH/libfftw3.a

unset CPPFLAGS CFLAGS LD CXX CC
}


mkdir $OUTPUT_DIR

rm -rf $OUTPUT_DIR/*

# Copy the header file too, just for convenience
cp api/fftw3.h $OUTPUT_DIR/fftw3.h

build_target "iPhoneOS" "armv7" "10.2" "arm-apple-darwin" "9.0"
build_target "iPhoneOS" "armv7s" "10.2" "arm-apple-darwin" "9.0"
build_target "iPhoneOS" "arm64" "10.2" "arm-apple-darwin" "9.0"
build_target "iPhoneSimulator" "x86_64" "10.2" "x86_64-apple-darwin" "9.0"
build_target "iPhoneSimulator" "i386" "10.2" "i386-apple-darwin" "9.0"

#build_target "MacOSX" "x86_64" "10.12" "i386-apple-darwin" "10.10"
1 голос
/ 29 августа 2010

Дело не в том, что Apple не разрешает библиотеку, а в том, что вы ссылаетесь на версию x86, и поэтому она не будет работать на iPhone.Вам нужно собрать библиотеку, используя iPhone SDK, а затем ссылку на эту версию.

Кроме того, вы можете быть немного непослушным и включить сторонний источник в свой основной проект.Непослушный, но он докажет, что Apple вас не останавливает, и покажет, будет ли библиотека работать на телефоне, в порядке.

Хотя чище хранить код в отдельном проекте библиотеки.

0 голосов
/ 12 апреля 2016

Я адаптировал предыдущие сценарии к

РАБОТА С XCODE7 iOS9.3 MACOSX 10.11 FFTW 3.3.4

#!/bin/sh

# build_lipo.sh
# build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
# make sure to check that all the paths used in this script exist on your system
#
# adopted from:
# http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
# changed by garlix
# original: by Nickun
# /3891135/kak-svyazat-storonnie-biblioteki-takie-kak-fftw3-i-sndfile-s-proektom-iphone-v-xcode

######## EDIT HERE ############
export iOS_SDK_VERSION=9.3
export MACOSX_VERSION=10.11
###############################

# this is the folder where the results of our efforts will end up:
export RESULT_DIR=ios-library
export XCODE_DEV_PATH=`xcode-select -print-path`
# Select toolchains folder
export XCODE_TOOLCHAINS=$XCODE_DEV_PATH/Toolchains/XcodeDefault.xctoolchain
# Select the desired iPhone SDK
export DEVROOT_IOS=$XCODE_DEV_PATH/Platforms/iPhoneOS.platform/Developer
export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS$iOS_SDK_VERSION.sdk
# Select the OSX SDK
export DEVROOT_OSX=$XCODE_DEV_PATH/Platforms/MacOSX.platform/Developer
export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX$MACOSX_VERSION.sdk

export LIB_NAME=libfftw3f

# ------------------------ i386 ---------------------------
# Do it for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

export CFLAGS="-arch i386"

# TODO: error checking
./configure --enable-float --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
make -j2

# Copy the FAT native library to a temporary location
mkdir -p $RESULT_DIR
cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_i386.a

# ------------------------ x86_64 ---------------------------
# Do it all again for x86_64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# TODO: error checking
./configure --enable-float
make -j2

# Copy the FAT native library to the temporary location
cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_x86_64.a

# ------------------------ armv7---------------------------
# Do it all again for armv7
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin

make -j2

cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_armv7.a

# Copy the header file too, just for convenience
cp dft/api/fftw3.h $RESULT_DIR/fftw3.h

# ------------------------ armv7s---------------------------
# Do it all again for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch armv7s -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin
make -j2

# Copy the ARM library to a temporary location
cp .libs/$LIB_NAME.a $RESULT_DIR/$LIB_NAME\_armv7s.a

# ------------------------ arm64 ---------------------------
# Do it all again for arm64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ -mfpu=neon"
export CFLAGS="$CPPFLAGS -arch arm64 -mfpu=neon -no-cpp-precomp -miphoneos-version-min=5.0 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ -mfpu=neon"
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 -mfpu=neon"
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --enable-float --enable-neon --host=arm-apple-darwin --target=arm-apple-darwin

make -j2

# Copy the ARM library to a temporary location
cp .libs/$LIB_NAME.a ios-library/$LIB_NAME\_arm64.a


# Create fat lib by combining the two versions
lipo -arch armv7 $RESULT_DIR/$LIB_NAME\_armv7.a -arch armv7s $RESULT_DIR/$LIB_NAME\_armv7s.a -arch i386 $RESULT_DIR/$LIB_NAME\_i386.a -arch x86_64 $RESULT_DIR/$LIB_NAME\_x86_64.a -arch arm64 $RESULT_DIR/$LIB_NAME\_arm64.a -create -output $RESULT_DIR/$LIB_NAME.a

# Remove intermediate binaries
#rm $RESULT_DIR/libfftw3_armv7.a
#rm $RESULT_DIR/libfftw3_i386.a
#rm $RESULT_DIR/libfftw3_x86_64.a

# Unset used environment variables
unset CPPFLAGS CFLAGS CPP LD LDFLAGS CXX CXXFLAGS

В соответствии с @Ninji вы должны изменить Makefile.am

 34c34
 < libbench2 $(CHICKEN_EGG) tests mpi doc tools m4
 ---
 > libbench2 $(CHICKEN_EGG) mpi doc m4
 95,108c95
 < pkgconfig_DATA = fftw3@PREC_SUFFIX@.pc
 < 
 < WISDOM_DIR = /etc/fftw
 < WISDOM = wisdom@PREC_SUFFIX@
 < 
 < WISDOM_TIME=12 # default to 12-hour limit, i.e. overnight
 < WISDOM_FLAGS=--verbose --canonical --time-limit=$(WISDOM_TIME)
 < 
 < wisdom:
 <   tools/fftw@PREC_SUFFIX@-wisdom -o $@ $(WISDOM_FLAGS)
 < 
 < install-wisdom: wisdom
 <   $(mkinstalldirs) $(WISDOM_DIR)
 <   $(INSTALL_DATA) wisdom $(WISDOM_DIR)/$(WISDOM)
 ---
 > pkgconfig_DATA = fftw3@PREC_SUFFIX@.pc
 \ No newline at end of file

и Makefile.in

235c235
 <    libbench2 . threads tests mpi doc tools m4
 ---
 >    libbench2 . threads mpi doc m4
 447c447
 < libbench2 $(CHICKEN_EGG) tests mpi doc tools m4
 ---
 > libbench2 $(CHICKEN_EGG) mpi doc m4
 1053,1058d1052
 < wisdom:
 <    tools/fftw@PREC_SUFFIX@-wisdom -o $@ $(WISDOM_FLAGS)
 < 
 < install-wisdom: wisdom
 <    $(mkinstalldirs) $(WISDOM_DIR)
 <    $(INSTALL_DATA) wisdom $(WISDOM_DIR)/$(WISDOM)
0 голосов
/ 02 июля 2014

Я попробовал сценарий Адама Фримена, он потрясающий, но мне пришлось сделать следующее, чтобы он заработал, поэтому я здесь, чтобы поделиться своими находками.Моя цель состоит в том, чтобы сделать fftw lib на основе рук, чтобы я мог собрать ее ++ lib через Xcode с архитектурой arm

Я также столкнулся с проблемой, опубликованной loretoparisi

/libbench2/libbench2.a:5:255: warning: null character ignored [-Wnull-character] 
./libbench2/libbench2.a:4:8: error: source file is not valid UTF-8

Обходной путь - убратьправило make для папок "tests", "tools" и любых других материалов, связанных с fftw- "wisdom" в Makefile.in и Makefile.am, я не знаю, насколько важны файлы из этих двух папок, но мне пришлось удалитьтак что сборка fftw может быть успешной без ошибки UTF-8

Мне также нужно изменить скрипт (я взял пробужденный флаг точности неона и числа с плавающей запятой, опять же, я также не знаю, насколько важны эти флаги)

#!/bin/sh

# build_lipo.sh
# build an arm64 / armv7s / armv7 / i386 / x86_64 lib of fftw3
# make sure to check that all the paths used in this script exist on your system
#
# adopted from:
# http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884
# changed by Adam
# original: by Nickun
# /3891135/kak-svyazat-storonnie-biblioteki-takie-kak-fftw3-i-sndfile-s-proektom-iphone-v-xcode

# this is the folder where the results of our efforts will end up:
export RESULT_DIR=ios-library

# Select toolchains folder
export XCODE_TOOLCHAINS=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain
# Select the desired iPhone SDK
export DEVROOT_IOS=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export SDKROOT_IOS=$DEVROOT_IOS/SDKs/iPhoneOS7.1.sdk
# Select the OSX SDK
export DEVROOT_OSX=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer
export SDKROOT_OSX=$DEVROOT_OSX/SDKs/MacOSX10.9.2.sdk

# ------------------------ i386 ---------------------------
# Do it for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP CC LD CXX LDFLAGS CXXFLAGS

export CFLAGS="-arch i386"

# TODO: error checking
./configure --host=i386-apple-darwin9.2.0 --target=i386-apple-darwin9.2.0
make -j2

# Copy the FAT native library to a temporary location
mkdir $RESULT_DIR
cp .libs/libfftw3.a $RESULT_DIR/libfftw3_i386.a
rm -fr .libs/libfftw3.a

# ------------------------ x86_64 ---------------------------
# Do it all again for x86_64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP CC LD CXX LDFLAGS CXXFLAGS

# TODO: error checking
./configure
make -j2

# Copy the FAT native library to the temporary location
cp .libs/libfftw3.a $RESULT_DIR/libfftw3_x86_64.a
rm -fr .libs/libfftw3.a

# ------------------------ armv7---------------------------
# Do it all again for armv7
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
export CFLAGS="$CPPFLAGS -arch armv7  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7 -std=gnu++11 -stdlib=libc++ "
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7 -std=gnu99 "
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin

make -j2

cp .libs/libfftw3.a $RESULT_DIR/libfftw3_armv7.a
rm -fr .libs/libfftw3.a

# Copy the header file too, just for convenience
cp api/fftw3.h $RESULT_DIR/fftw3.h

# ------------------------ armv7s---------------------------
# Do it all again for i386
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
export CFLAGS="$CPPFLAGS -arch armv7s  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch armv7s -std=gnu++11 -stdlib=libc++ "
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch armv7s -std=gnu99 "
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin

make -j2

# Copy the ARM library to a temporary location
cp .libs/libfftw3.a $RESULT_DIR/libfftw3_armv7s.a
rm -fr .libs/libfftw3.a

# ------------------------ arm64 ---------------------------
# Do it all again for arm64
make clean

# Restore default environment variables
unset CPPFLAGS CFLAGS CPP LD CXX CC LDFLAGS CXXFLAGS

# Set up relevant environment variables
export CPPFLAGS="-I$SDKROOT_IOS/usr/include/ "
export CFLAGS="$CPPFLAGS -arch arm64  -no-cpp-precomp -miphoneos-version-min=6.1 -isysroot $SDKROOT_IOS"
export LD=$XCODE_TOOLCHAINS/usr/bin/ld
export CXX="$XCODE_TOOLCHAINS/usr/bin/clang -x c++ -arch arm64 -std=gnu++11 -stdlib=libc++ "
export CC="$XCODE_TOOLCHAINS/usr/bin/clang -x c -arch arm64 -std=gnu99 "
export CXXFLAGS="$CFLAGS"

# TODO: add custom flags as necessary for package
#  remove '--enable-float' for double precision
#  and take a 'libfftw3.a' file instead
./configure --host=arm-apple-darwin --target=arm-apple-darwin

make -j2

# Copy the ARM library to a temporary location
cp .libs/libfftw3.a ios-library/libfftw3_arm64.a
rm -fr .libs/libfftw3.a

# Create fat lib by combining the two versions
lipo -arch armv7 $RESULT_DIR/libfftw3_armv7.a -arch armv7s $RESULT_DIR/libfftw3_armv7s.a -arch i386 $RESULT_DIR/libfftw3_i386.a -arch x86_64 $RESULT_DIR/libfftw3_x86_64.a -arch arm64 $RESULT_DIR/libfftw3_arm64.a -create -output $RESULT_DIR/libfftw3.a

# Remove intermediate binaries
#rm $RESULT_DIR/libfftw3_armv7.a
#rm $RESULT_DIR/libfftw3_i386.a
#rm $RESULT_DIR/libfftw3_x86_64.a

# Unset used environment variables
unset CPPFLAGS CFLAGS CPP LD LDFLAGS CC CXX CXXFLAGS
...