Cross Compiling Linphone(转载)

来源:互联网 发布:淘宝怎么打假手机 编辑:程序博客网 时间:2024/05/01 02:54

FRIDAY, AUGUST 12, 2011

Cross Compiling Linphone(1)

In this post, we will cross compile linphone for ARM devices. When it comes to video capability, it will support video output via SDL but no web cam interface. Including camera support is not difficult as long as V4L library is prepared.

First gather the required sources:

  • libav-0.7.1
  • libeXosip2-3.5.0
  • libogg-1.3.0
  • libosip2-3.5.0
  • libvorbis-1..3.2
  • linphone-3.4.3
  • ncurses-5.9
  • readline-6.2
  • SDL-1.2.14
  • speex-1.2rc1

and extract them under a directory, say linphone. Then create a target output directory, say install. Your directory structure then will look like this:

Cross <wbr>Compiling <wbr>Linphone(转载)

To save tedious repetitive typing, prepare environmental variables

export PREFIX=/usr/local
export HOSTTPL=arm-none-linux-gnueabi
export INSTALLDIR=/home/user/linphone/install

These may vary on your situation. Most of the procedures for each library compilation basically consist of following three steps:

$ configure 
$ make
$ make install 

So we will just list the commands with arguments until the last step, which will requires some interventions. Before we start, we may need intltool package

$ sudo apt-get install intltool

Now, let's get started. We have a long way to go.

ncurses

We won't use gtk+ gui interface so we need this for better command line interface.

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-shared --with-gnu-ld
$ make
$ make install DESTDIR=$INSTALLDIR

Before going further, there is one thing you have to remember. As it is directed by the INSTALLDIR variable, the outputs will reside on the directory:

/home/user/linphone/install/usr/local

Under that directory you can find lib subdirectory where all the resulting libraries will populate. You can also find libtool archive files (*.la) there. Because we are doing cross compilation, these files usually contains wrong information so it should be deleted as soon as it is created. If you meet compilation error with strange library reference (looking for a library in the wrong place), then you should check the *.la files there.

readline

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --disable-static
$ make
$ make install DESTDIR=$INSTALLDIR


libosip2

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld --disable-static
$ make
$ make install DESTDIR=$INSTALLDIR


libogg

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld
$ make
$ make install DESTDIR=$INSTALLDIR


libeXosip2

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld --disable-static \
        OSIP_CFLAGS="-I$INSTALLDIR//usr/local/include" \
        OSIP_LIBS="-L$INSTALLDIR/usr/local/lib -losip2 -losipparser2"
$ make
$ make install DESTDIR=$INSTALLDIR

It is the good time to check the target library for the "la" files and delete them.

speex

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld --disable-static \
        --enable-fixed-point --enable-arm-asm --with-ogg="$INSTALLDIR/usr/local"
$ make
$ make install DESTDIR=$INSTALLDIR


libav

$ ./configure --prefix=$PREFIX --enable-cross-compile \
        --cross-prefix=arm-none-linux-gnueabi- \
        --arch=armv6 --target-os=linux \
        --disable-ffserver --disable-ffplay --disable-ffprobe
$ make
$ make install DESTDIR=$INSTALLDIR

There are a bunch of --enable-xxx and --disable-xxx options are there. You can spend some time to fine tune the options to minimize the size of the output.

SDL

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld
$ make
$ make install DESTDIR=$INSTALLDIR


libvorbis

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld \
        --with-ogg="$INSTALLDIR/usr/local"
$ make
$ make install DESTDIR=$INSTALLDIR
Posted by Brian at 11:13 AM  
Email ThisBlogThis!Share to TwitterShare to Facebook
Labels: arm, cross compile, linphone

FRIDAY, AUGUST 12, 2011

Cross Compiling Linphone(2)

It is time to compile the linphone. Command line argument list is quite long this case:

$ ./configure --prefix=$PREFIX --host=$HOSTTPL --with-gnu-ld \
        --disable-static --disable-glib --enable-gtk_ui=no \
        --enable-sdl --disable-x11 --disable-libv4l \
        --with-osip=$INSTALLDIR/usr/local \
        --with-readline=$INSTALLDIR/usr/local \
        SPEEX_CFLAGS="-I$INSTALLDIR/usr/local/include" \
        SPEEX_LIBS="-L$INCLUDEDIR/usr/local/lib -lspeex" \
        FFMPEG_CFLAGS="-I$INSTALLDIR/usr/local/include" \
        FFMPEG_LIBS="-L$INCLUDEDIR/usr/local/lib -lavcodec" \
        SWSCALE_CFLAGS="-I$INSTALLDIR/usr/local/include" \
        SWSCALE_LIBS="-L$INCLUDEDIR/usr/local/lib -lswscale" \
        SDL_CFLAGS="-I$INSTALLDIR/usr/local/include" \
        SDL_LIBS="-L$INCLUDEDIR/usr/local/lib -lSDL" 

Still there are some Makefiles and a source file we have to fix before we build them.

mediastreamer2/tests/Makefile

Find the LIBS variable and change it as:

LIBS = -pthread -lpthread -lrt -lvorbisenc -lvorbis -logg -lspeexdsp


mediastreamer2/coreapi/Makefile

Find the LIBS variable and change it as:

LIBS = -losip2 -lspeex -lSDL -lvorbis -lvorbisenc -lspeexdsp -logg -lavutil


mediastreamer2/coreapi/help/Makefile

Find the LIBS variable and change it as:

LIBS = -leXosip2 -lspeex -lSDL -lvorbisenc -losipparser2 -losip2 -lvorbis \
        -lspeexdsp -logg

And find the helloworld_LADD variable and add $(EXOSIP_LIBS) as:

helloworld_LDADD = $(top_builddir)/coreapi/liblinphone.la \
        $(EXOSIP_LIBS) \
        $(MEDIASTREAMER_LIBS) \
        $(ORTP_LIBS)


mediastreamer2/console/Makefile

Find the LIBS variable and change it as:

LIBS = -leXosip2 -losip2 -lSDL -lvorbis -lvorbisenc -lspeexdsp -logg -losipparser2

And find linphonecsh_LDADD variable and change it as:

linphonecsh_LDADD = $(ORTP_LIBS) -L/home/user/linphone/install/usr/local/lib 


mediastreamer2/src/videoout.c

This file contains some obsolete function calls such as ms_sws_freeContext, ms_sws_getContext and, so on. So it won't compile unless we fix them (replace them with correct function calls). Details are here:
https://bugs.gentoo.org/attachment.cgi?id=269363&action=diff
Finally, we are ready to build linphone. What you need is a good luck now.

$ make
$ make install DESTDIR=$INSTALLDIR
原创粉丝点击