为所有体系结构编译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,我可以使用哪个命令或工具
为所有设备编译的步骤。
- 分别编译所有设备
- 与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变得更容易:
你可以在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