Building librtmp for iOS

http://www.davideccher.com/blog/wordpress/building-librtmp-for-ios/

I want to describe a detailed command line way to build librtmp and openssl in order to include in an iPhone / iOS project.

You can use this as example to build any other library.

I started from the project from saiten where all this procedure is scripted in build.sh.

We start building openssl. We need to build three version of the library:

  • arm6
  • arm7
  • i386 for simulator

We need three version in order to create a binary compatible with the old devices and i386 for the simulator.

Download the openssl source code. (http://www.openssl.org/source/).


mkdiropenssl
cdopenssl
curl http://www.openssl.org/source/openssl-1.0.0g.tar.gz -O openssl-1.0.0g.tar.gz
tar -xfz openssl-1.0.0g.tar.gz

We’ll build all the release in the tmp folder.
Start to configure it for armv6.

mkdir/tmp/openssl-1.0.0g-armv6
cdopenssl-1.0.0g
./configureBSD-generic32 --openssldir=/tmp/openssl-1.0.0g-armv6

Now we has to edit Makefile and change

#edit Makefile and change
#CC= gcc with CC= /Applications/Xcode.app//Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv6
# add to CLAGS: -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk

This links are valid for my buildsystem, using SDK 5.0. Change it to  build for other buildsystem.

At this point we are ready to build.


make
makeinstall

Now in /tmp/openssl-1.0.0g-armv6 we have the builded lib.

We do the same for armv7 and i386:


#ARMV7
cd..
mkdir/tmp/openssl-1.0.0g-armv7
rm-fr openssl-1.0.0g
tar -xfz openssl-1.0.0g.tar.gz
cdopenssl-1.0.0g
./configureBSD-generic32 --openssldir=/tmp/openssl-1.0.0g-armv7
#edit Makefile and change
#CC= gcc with CC= /Applications/Xcode.app//Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7
#add to CLAGS: -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk
make
makeinstall
 
#i386
mkdir/tmp/openssl-1.0.0g-i386
rm-fr openssl-1.0.0g
tar -xfz openssl-1.0.0g.tar.gz
cdopenssl-1.0.0g
./configureBSD-generic32 --openssldir=/tmp/openssl-1.0.0g-i386
#edit Makefile and change
#CC= gcc with CC= /Applications/Xcode.app//Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386
#add to CLAGS: -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk
make
makeinstall

At this point we can create an universal library using lipo.


cd..
mkdirinclude
cp-r/tmp/openssl-1.0.0g-i386/include/include/
mkdirlib
 
lipo/tmp/openssl-1.0.0g-armv6/lib/libcrypto.a/tmp/openssl-1.0.0g-armv7/lib/libcrypto.a/tmp/openssl-1.0.0g-i386/lib/libcrypto.a -create -output lib/libcrypto.a
 
lipo/tmp/openssl-1.0.0g-armv6/lib/libssl.a/tmp/openssl-1.0.0g-armv7/lib/libssl.a/tmp/openssl-1.0.0g-i386/lib/libssl.a -create -output lib/libssl.a


Now we have in our include and lib folder the the universal library of openssl.

To build librmtb for ios we build the three version of library like for openssl.

Starting cloning the last release

mkdirlibrtmp
cdlibrtmp
git clone git://git.ffmpeg.org/rtmpdumprtmpdump

To build the armv6 version of library make a copy of the source:


cp-r rtmpdump rtmpdump-armv6
cdrtmpdump-armv6/librtmp
#edit Makefile and set
#CC=$(CROSS_COMPILE)gcc -arch armv6
exportCROSS_COMPILE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
exportXCFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -I/tmp/openssl/include/ -arch armv6"
exportXLDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/tmp/openssl/lib -arch armv6 "
makeSYS=darwin
makeSYS=darwin prefix=/tmp/librtmp-armv6install

Change the path to export using the correct system build path  and the path of the openssl lib build before.

For the armv7


cp-r rtmpdump rtmpdump-armv7
cdrtmpdump-armv7/librtmp
#edit Makefile and change
#CC=$(CROSS_COMPILE)gcc -arch armv7
exportCROSS_COMPILE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
exportXCFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -I/tmp/openssl/include/ -arch armv7"
exportXLDFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk -L/tmp/openssl/lib -arch armv7 "
makeSYS=darwin
makeSYS=darwin prefix=/tmp/librtmp-armv7install

For simulator


cd..
cp-r rtmpdump rtmpdump-i386
cdrtmpdump-i386/librtmp
edit Makefile con
CC=$(CROSS_COMPILE)gcc -arch i386
exportCROSS_COMPILE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/
exportXCFLAGS="-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -I/tmp/openssl/include/ -arch i386"
exportXLDFLAGS="-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/tmp/openssl/lib -arch i386 "
makeSYS=darwin
makeSYS=darwin prefix=/tmp/librtmp-i386install

At this point we can create an universal library using lipo.


mkdirinclude
cp-r/tmp/librtmp-i386/include/librtmpinclude/
mkdirlib
lipo/tmp/librtmp-armv6/lib/librtmp.a/tmp/librtmp-armv7/lib/librtmp.a/tmp/librtmp-i386/lib/librtmp.a -create -output lib/librtmp.a

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章