Ios 为所有架构编译PJSIP2.5库

Ios 为所有架构编译PJSIP2.5库,ios,makefile,build,voip,pjsip,Ios,Makefile,Build,Voip,Pjsip,为了编译iPhone设备的PJSIP库,我使用以下代码 make distclean && make clean ARCH='-arch arm64' ./configure-iphone --enable-opus-codec make dep make 此代码允许我仅为单个体系结构安装应用程序。 要为所有架构(armv7、armv7s、arm64、i386、x86_64)编译pjsip,我可以使用哪个命令或工具为所有设备编译 分别为所有设备编译 合并脂肪 例如 -创建/li

为了编译iPhone设备的PJSIP库,我使用以下代码

make distclean && make clean
ARCH='-arch arm64' ./configure-iphone --enable-opus-codec
make dep
make
此代码允许我仅为单个体系结构安装应用程序。
要为所有架构(armv7、armv7s、arm64、i386、x86_64)编译pjsip,我可以使用哪个命令或工具为所有设备编译

  • 分别为所有设备编译
  • 合并脂肪
  • 例如

    -创建/libsrtp-arm64-apple-darwin\u ios.a/libsrtp-i386-apple-darwin\u ios.a-输出文件名

    然后使用
    output\u file\u name.a
    作为所有设备和模拟器的通用库

    要检查支持的体系结构:
    output\u file\u name.a

    lipo-静态库的信息名称

    输出:
    /libsrtp-universal-apple-darwin_ios.a是:armv7 armv7s i386 x86_64 arm64

    谢谢

    合并如下所示

    lipo-create/My\Project/pjsip universal/x86_64/libgsmcodec-x86_64-apple-darwin_ios.a/My\Project/pjsip universal/i386/libgsmcodec-i386-apple-darwin_ios.a/My\Project/pjsip universal/armv7s/libgsmcodec-armv7s-apple-darwin_ios.alibgsmcodec-armv7-apple-darwin\u ios.a/My\Project/pjsip universal/arm64/libgsmcodec-arm64-apple-darwin\u ios.a-output/My\Project/pjsip universal/universal/libgsmcodec-universal-apple-darwin\u ios.a

    最后测试一下

    lipo-info/My\Project/pjsip universal/libgsmcodec-universal-apple-darwin\u ios.a

    输出: fat文件中的架构:/My Project/pjsip universal/libgsmcodec-universal-apple-darwin_ios.a是:i386 armv7s armv7 x86_64 arm64

    生成通用体系结构后:

    按照此链接从链接中的此行添加到项目中

    将头文件添加到项目中


    希望这能对您有所帮助。

    我们编写了一个cocoapod,它将创建一个静态库,您可以将其包含在项目中。目前,您只能在Objective C CoCoPapod环境中使用它。我们正在开发一个版本,该版本将创建一个动态库,以便与Swift一起使用

    请在以下网址查阅:

    我们制作了一个开源包装器,使在iOS项目中集成PJSIP变得更加容易:

    ——构建PJSIP库的一种方法——使用PJSIP2.6进行测试
    //为XCode 8更新。
    建筑PJSIP
    $cd/Users/ravimalviya/Developer/Dev2/trunk
    //如果要指定支持的最低iOS版本
    //export MIN_IOS=“-miphoneos版本MIN=8.0”
    使用armv7架构为默认iPhone4编译库和构建
    $/配置iphone&&make-dep&&make-clean&&make
    为iphone5构建,使用armv7s架构
    $ARCH='-ARCH armv7s'/配置iphone&&make dep&&make clean&&make
    为iPhone 5s构建,使用arm64架构
    $ARCH='-ARCH arm64'/配置iphone&&make dep&&make clean&&make
    为模拟器构建,使用i386架构
    导出DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
    ARCH=“-ARCH i386”CFLAGS=“-O2-m32-mios模拟器最低版本=5.0”LDFLAGS=“-O2-m32-mios模拟器最低版本=5.0”。/configure iphone
    使dep和make干净和使
    为模拟器构建,使用x86_64体系结构
    导出DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
    ARCH=“-ARCH x86_64”CFLAGS=“-O2-m32-mios模拟器最低版本=5.0”LDFLAGS=“-O2-m32-mios模拟器最低版本=5.0”。/configure iphone
    使dep和make干净和使
    汇编结果
    pjlib/lib
    pjlib util/lib
    pjmedia/lib
    pjsip/lib
    pjnath/lib
    第三方/自由党
    注:添加到项目中。。
    合并生成的体系结构(arm64、armv7、armv7s、i386、x86_64)支持的库。
    //转到收集所有生成库的目录。创建文件夹名称arm64、armv7s、armv7、i386、x86_64并分别放置所有库。每个都只有一个受arch支持的库文件。
    //重命名所有这5个文件夹中的文件这是创建通用库的简单方法。
    //还要创建名为unified的文件夹,所有unversal库都将在其中创建。
    $export LIB_NAME=“libg7221codec.a”
    $lipo-arch armv7 armv7/$LIB_NAME-arch armv7s armv7s/$LIB_NAME-arch arm64 arm64/$LIB_NAME-arch i386 i386/$LIB_NAME-arch x86_64/$LIB_NAME-create-output unified/$LIB_NAME
    //-arch armv7s armv7s/$LIB_NAME表示支持armv7s从仅支持armv7s的目录armv7s/$LIB_NAME和$LIB_NAME文件名中获取库。
    //-arch arm64 arm64/$LIB_名称。。。。。。。。。。。。
    //-arch armv7 armv7/$LIB_名称。。。。。。。。。。。。
    //-拱门i386 i386/$LIB_名称。。。。。。。。。。。。。。
    //-拱门x86_64 x86_64/$LIB_名称。。。。。。。。。。。。。。
    //unified/$LIB_NAME是使用lips构建unversal库的目录。与导出的$LIB_名称相同。做同样的事。
    //检查您的库所支持的拱门
    xcrun-sdk iphoneos lipo-info unified/$LIB_NAME
    $export LIB_NAME=“libgsmcodec.a”
    $lipo-arch armv7 armv7/$LIB_NAME-arch armv7s armv7s/$LIB_NAME-arch arm64 arm64/$LIB_NAME-arch i386 i386/$LIB_NAME-arch x86_64/$LIB_NAME-create-output unified/$LIB_NAME
    $export LIB_NAME=“libilbccodec.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpj.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjlib util.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjmedia audiodev.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjmedia codec.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjmedia videodev.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjmedia.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjnath.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjsdp.a”
    $..…与lipo中的上述内容相同。。。。。。
    $export LIB_NAME=“libpjsip simple.a”
    $..…与lipo中的上述内容相同。。。。。。
    $exp
    
    --- One Way to build PJSIP libraries --- test with pjsip 2.6
    
    //Updated for XCode 8. 
    
    Building PJSIP
    $ cd /Users/ravimalviya/Developer/Dev2/trunk
    
    //If you want to specify the minimum supported iOS version
    //export MIN_IOS="-miphoneos-version-min=8.0"
    
    Compile Library and Build For Default iPhone 4 use armv7 architecture
    $ ./configure-iphone && make dep && make clean && make
    
    Build For iPhone 5, use armv7s architecture
    $ ARCH='-arch armv7s' ./configure-iphone && make dep && make clean && make
    
    Build For iPhone 5s, use arm64 architecture
    $ ARCH='-arch arm64' ./configure-iphone && make dep && make clean && make
    
    Build For Simulator, use i386 architecture
    export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
    ARCH="-arch i386" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
    make dep && make clean && make
    
    Build For Simulator, use x86_64 architecture
    export DEVPATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer
    ARCH="-arch x86_64" CFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" LDFLAGS="-O2 -m32 -mios-simulator-version-min=5.0" ./configure-iphone
    make dep && make clean && make
    
    The compilation result
    pjlib/lib       
    pjlib-util/lib
    pjmedia/lib
    pjsip/lib
    pjnath/lib
    third_party/lib
    Note add into project..
    
    Combine resulting archtecture(arm64,armv7,armv7s,i386, x86_64) supported library .a file.
    
    //goto directory where you collect all build library. create folder name arm64, armv7s, armv7, i386, x86_64 and put all library respectivly. each having only one arch supported library file.
    //rename file in all these 5 folders it's a easy way to make universal library.
    //Also create folder named unified where all unversal library will create.
    
    $ export LIB_NAME="libg7221codec.a"
    $ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
    
    //-arch armv7s armv7s/$LIB_NAME means support armv7s get library from directory armv7s/$LIB_NAME and $LIB_NAME file name that only support armv7s.
    //-arch arm64 arm64/$LIB_NAME ............
    //-arch armv7 armv7/$LIB_NAME ............
    //-arch i386 i386/$LIB_NAME ..............
    //-arch x86_64 x86_64/$LIB_NAME ..............
    //unified/$LIB_NAME is directory where unversal library will build using lips. with same name $LIB_NAME that export. do it same.
    
    //check which arch you lib is supporting
    xcrun -sdk iphoneos lipo -info unified/$LIB_NAME
    
    $ export LIB_NAME="libgsmcodec.a"
    $ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
    $ export LIB_NAME="libilbccodec.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpj.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjlib-util.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjmedia-audiodev.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjmedia-codec.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjmedia-videodev.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjmedia.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjnath.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsdp.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsip-simple.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsip-ua.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsip.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsua.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsua.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libpjsua2.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libresample.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libspeex.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libsrtp.a"
    $ .....same as above in lipo......
    $ export LIB_NAME="libyuv.a"
    $ lipo -arch armv7 armv7/$LIB_NAME -arch armv7s armv7s/$LIB_NAME -arch arm64 arm64/$LIB_NAME -arch i386 i386/$LIB_NAME -arch x86_64 x86_64/$LIB_NAME -create -output unified/$LIB_NAME
    
    Note: Unversal libraries you can add into your project and also mention in library search path.
    
    //In order to use the pjsip libraries, we need to include folder that ahve header files that access .a files. Naturally, the header files are located in:
    pjlib/include
    pjlib-util/include
    pjmedia/include
    pjnath/include
    pjsip/include
    
    Note: do't add into project..buz you can not import like import <pjsip-lib/pjsip.h>
    so just place these folder into project directory where ever you want but mention in header search path.
    
    Enjoy (:)
    
    #!/bin/bash
    
    ARCHS="armv7 armv7s arm64"
    mkdir -p uni
    
    echo "Compiling..."
    for arch in $ARCHS
    do
      echo $arch
      echo "=================================="
      echo
      ARCH="-arch $arch" ./configure-iphone && make dep && make clean && make
      echo "Done."
      echo
    done
    
    RESULT_PATHS="pjlib/lib pjlib-util/lib pjmedia/lib pjsip/lib pjnath/lib third_party/lib"
    for path in $RESULT_PATHS
    do
      echo $path
      for file in `ls $path/*-armv7-*`
      do
        library=`echo $file | sed "s/-armv7-\(.*$\)//g"`
        library_tail=`echo $file | sed "s/.*-armv7-//g"`
        lipo -arch armv7 $library-armv7-$library_tail -arch armv7s $library-armv7s-$library_tail -arch arm64 $library-arm64-$library_tail -create -output $library.a
        cp -vi $library.a uni
      done
    done