How do I link third party libraries like fftw3 and sndfile to an iPhone project in Xcode?

前端 未结 9 1302
情歌与酒
情歌与酒 2020-12-09 07:08

I\'m trying to link third party libraries like fftw3 and sndfile to my iPhone project in Xcode3.2. I got it working in a regular Mac project by setting the \"Header Search P

相关标签:
9条回答
  • 2020-12-09 07:54

    Based on the answer by 10mitri, working for 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"
    
    0 讨论(0)
  • 2020-12-09 08:00

    For compiling fftw3 for use in an iOS project, i've adapted the script posted here: http://robertcarlsen.net/2009/07/15/cross-compiling-for-iphone-dev-884

    Used with fftw3.2.2 on OS X 10.6 with 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
    

    Run this script from the directory containing fftw3. The files you need should end up in the ios-library folder.

    0 讨论(0)
  • 2020-12-09 08:02

    I've modified Epskampie's script for IOS 5.0+
    Used with fftw3.3.3 on OS X 10.7 with IOS SDK 6.0 and 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:
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    
    # 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
    
    0 讨论(0)
提交回复
热议问题