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

前端 未结 9 1343
情歌与酒
情歌与酒 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:43

    I modified Nickun's script for Mac OS X 10.9.2, iOS 7.1, fftw-3.3.4. It also adds an arm64 slice to the fat file. Here is the script ->

    #!/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
    # http://stackoverflow.com/questions/3588904/how-to-link-third-party-libraries-like-fftw3-and-sndfile-to-an-iphone-project-in
    
    # 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
    

提交回复
热议问题