为所有体系结构编译PJSIP 2.5库

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

make distclean && make clean ARCH='-arch arm64' ./configure-iphone --enable-opus-codec make dep make 

此代码允许我只安装我的应用程序的单一架构。 要为所有体系结构(armv7,armv7s,arm64,i386,x86_64)编译pjsip,我可以使用哪个命令或工具

为所有设备编译的步骤。

  1. 分别编译所有设备
  2. 与lipo合并

例如。

-create /libsrtp-arm64-apple-darwin_ios.a /libsrtp-i386-apple-darwin_ios.a -output output_file_name

然后使用output_file_name.a作为所有设备和模拟器的通用库

检查支持的体系结构: output_file_name.a

lipo -info name_of_static_lib

output : /libsrtp-universal-apple-darwin_ios.a are: armv7 armv7s i386 x86_64 arm64

为所有archietectures编译PJSIP 2.5库

谢谢

 --- 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 (:) 

在这里输入图像说明

像这样的合并张贴

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.a / My \ Project / pjsip-universal / armv7 / libgsmcodec-armv7-apple-darwin_ios.a / My \ Project / pjsip-universal / arm64 / libgsmcodec-arm64-apple- darwin_ios.a -output / My \ Project / pjsip-universal / universal / libgsmcodec-universal-apple-darwin_ios.a

最后testing一下

lipo -info / My \ Project / pjsip-universal / libgsmcodec-universal-apple-darwin_ios.a

输出:fat文件中的体系结构:/我的项目/ pjsip-universal / libgsmcodec-universal-apple-darwin_ios.a是: i386 armv7s armv7 x86_64 arm64

一旦生成通用架构:

按照这个链接在这个链接添加你的项目

将头文件添加到项目中

如何添加项目

希望这会帮助你。

我们写了一个cocoapod,它将创build一个可以包含在你的项目中的静态库。 目前,您只能在Objective C cocoapod环境中使用它。 我们正在研究一个将创builddynamic库的版本,以便它可以与Swift一起使用。

请查看:

https://github.com/VoIPGRID/Vialer-pjsip-iOS

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

https://github.com/VoIPGRID/VialerSIPLib

你可以在GitHub上检查这个项目,它的作者为所有架构构build了pjsip,甚至为了方便CocoaPods集成提供了podspec。

我正在使用这个脚本来为我的arch构buildpjsip。

我正在pjsip根文件夹中运行它,它会创build一个包含结果库的uni文件夹,然后将其链接/添加到我的项目中。

 #!/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