| Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org> |
| Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com) |
| |
| This program is free software: you can redistribute it and/or modify it |
| under the terms of the GNU General Public License as published by the Free |
| Software Foundation, either version 2 of the License, or (at your option) |
| any later version. |
| |
| This program is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
| or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| for more details. |
| |
| You should have received a copy of the GNU General Public License along |
| with this program. If not, see http://www.gnu.org/licenses/. |
| |
| |
| Getting Started: Building and Using PJSIP and PJMEDIA |
| |
| [Last Update: $Date: 2007-02-02 20:42:44 +0000 (Fri, 02 Feb 2007) $] |
| |
| Print Friendly Page |
| _________________________________________________________________ |
| |
| This article describes how to download, customize, build, and use the open |
| source PJSIP and PJMEDIA SIP and media stack. The online (and HTML) version |
| of this file can be downloaded from http://www.pjsip.org/using.htm |
| |
| |
| Quick Info |
| _________________________________________________________________ |
| |
| Building with GNU tools (Linux, *BSD, MacOS X, mingw, etc.) |
| Generally these should be all that are needed to build the libraries, |
| applications, and samples: |
| |
| $ ./configure |
| $ make dep && make clean && make |
| |
| Building Win32 Target with Microsoft Visual Studio |
| Generally we can just do these steps: |
| |
| 1. Visual Studio 6: open pjproject.dsw workspace, |
| 2. Visual Studio 2005: open pjproject-vs8.sln solution, |
| 3. Create an empty pjlib/include/pj/config_site.h, and |
| 4. build the pjsua application. |
| |
| Building for Windows Mobile |
| Generally these are all that are needed: |
| |
| 1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw EVC4 workspace, |
| 2. Create an empty pjlib/include/pj/config_site.h, and |
| 3. build the pjsua_wince application. |
| |
| Invoking Older Build System (e.g. for RTEMS) |
| Generally these should be all that are needed to build the libraries, |
| applications, and samples: |
| |
| $ ./configure-legacy |
| $ make dep && make clean && make |
| |
| Locating Output Binaries/Libraries |
| Libraries will be put in lib directory, and binaries will be put in |
| bin directory, under each projects. |
| |
| Running the Applications |
| After successful build, you can try running pjsua application on |
| pjsip-apps/bin directory. PJSUA manual can be found in |
| http://www.pjsip.org/pjsua.htm page. |
| |
| |
| Table of Contents: |
| _________________________________________________________________ |
| |
| 1. Getting the Source Distribution |
| |
| 1.1 Getting the Release tarball |
| |
| 1.2 Getting from Subversion trunk |
| |
| 1.3 Source Directories Layout |
| |
| 2. Build Preparation |
| |
| 2.1 config_site.h file |
| |
| 2.2 Disk Space Requirements |
| |
| 3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build |
| Systems |
| |
| 3.1 Supported Targets |
| |
| 3.2 Requirements |
| |
| 3.3 Running configure |
| |
| 3.4 Running make |
| |
| 3.5 Cross Compilation |
| |
| 3.6 Build Customizations |
| |
| 4. Building for Windows Targets with Microsoft Visual Studio |
| |
| 4.1 Requirements |
| |
| 4.2 Building the Projects |
| |
| 4.3 Debugging the Sample Application |
| |
| 5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone) |
| |
| 5.1 Requirements |
| |
| 5.2 Building the Projects |
| |
| 6. Older PJLIB Build System for Non-Autoconf Targets (e.g. RTEMS) |
| |
| 6.1 Supported Targets |
| |
| 6.2 Invoking the Build System |
| |
| 7. Running the Applications |
| |
| 7.1 pjsua |
| |
| 7.2 Sample Applications |
| |
| 7.3 pjlib-test |
| |
| 7.4 pjsip-test |
| |
| 8. Using PJPROJECT with Applications |
| |
| |
| Appendix I: Common Problems/Frequently Asked Question (FAQ) |
| |
| I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h': |
| No such file or directory |
| |
| |
| 1. Getting the Source Code Distribution |
| _________________________________________________________________ |
| |
| All libraries (PJLIB, PJLIB-UTIL, PJSIP, PJMEDIA, and PJMEDIA-CODEC) are |
| currently distributed under a single source tree, collectively named as |
| PJPROJECT or just PJ libraries. These libraries can be obtained by either |
| downloading the release tarball or getting them from the Subversion trunk. |
| |
| |
| 1.1 Getting the Release tarball |
| _________________________________________________________________ |
| |
| Getting the released tarball is a convenient way to obtain stable version of |
| PJPROJECT. The tarball may not contain the latest features or bug-fixes, but |
| normally it is considered more stable as each will be tested more rigorously |
| before released. |
| |
| The latest released tarball can be downloaded from the |
| http://www.pjsip.org/download.htm. |
| |
| |
| 1.2 Getting from Subversion trunk |
| _________________________________________________________________ |
| |
| PJPROJECT Subversion repository will always contain the latest/most |
| up-to-date version of the sources. Normally the Subversion repository is |
| always kept in a "good" state. However, there's always a chance that things |
| break and the tree doesn't build correctly (particularly for the |
| "not-so-popular" targets), so please consult the mailing list should there |
| be any problems. |
| |
| Using Subversion also has benefits of keeping the local copy of the source |
| up to date with the main PJ source tree and to easily track the changes made |
| to the local copy, if any. |
| |
| |
| What is Subversion |
| |
| Subversion (SVN) is Open Source version control system similar to CVS. |
| Subversion homepage is in http://subversion.tigris.org/ |
| |
| |
| Getting Subversion Client |
| |
| A Subversion (SVN) client is needed to download the PJ source files from |
| pjsip.org SVN tree. SVN client binaries can be downloaded from |
| http://subversion.tigris.org/, and the program should be available for |
| Windows, Linux, MacOS X, and many more platforms. |
| |
| |
| Getting the Source for The First Time |
| |
| Once Subversion client is installed, we can use these commands to initially |
| retrieve the latest sources from the Subversion trunk: |
| |
| |
| |
| $ svn co http://svn.pjproject.net/repos/pjproject/trunk pjproject |
| $ cd pjproject |
| |
| |
| Keeping The Local Copy Up-to-Date |
| |
| Once sources have been downloaded, we can keep the local copy up to date by |
| periodically synchronizing the local source with the latest revision from |
| the PJ's Subversion trunk. The mailing list provides best source of |
| information about the availability of new updates in the trunk. |
| |
| To update the local copy with the latest changes in the main PJ's |
| repository: |
| |
| |
| |
| $ cd pjproject |
| $ svn update |
| |
| |
| Tracking Local and Remote Changes |
| |
| To see what files have been changed locally: |
| |
| |
| |
| $ cd pjproject |
| $ svn status |
| |
| The above command only compares local file against the original local copy, |
| so it doesn't require Internet connection while performing the check. |
| |
| To see both what files have been changed locally and what files have been |
| updated in the PJ's Subversion repository: |
| |
| |
| |
| $ cd pjproject |
| $ svn status -u |
| |
| Note that this command requires active Internet connection to query the |
| status of PJPROJECT's source repository. |
| |
| |
| 1.3 Source Directories Layout |
| _________________________________________________________________ |
| |
| Top-Level Directory Layout |
| |
| The top-level directories (denoted as $TOP here) in the source distribution |
| contains the following sub-directories: |
| |
| $TOP/build |
| Contains makefiles that are common for all projects. |
| |
| $TOP/pjlib |
| Contains header and source files of PJLIB. PJLIB is the base |
| portability and framework library which is used by all other |
| libraries |
| |
| $TOP/pjlib-util |
| Contains PJLIB-UTIL header and source files. PJLIB-UTIL is an |
| auxiliary library that contains utility functions such as scanner, |
| XML, STUN, MD5 algorithm, getopt() implementation, etc. |
| |
| $TOP/pjmedia |
| Contains PJMEDIA and PJMEDIA-CODEC header and source files. The |
| sources of various codecs (such as GSM, Speex, and iLBC) can be found |
| under this directory. |
| |
| $TOP/pjsip |
| Contains PJSIP header and source files. |
| |
| $TOP/pjsip-apps |
| Contains source code for PJSUA and various sample applications. |
| |
| |
| Individual Directory Inside Each Project |
| |
| Each library directory further contains these sub-directories: |
| |
| bin |
| Contains binaries produced by the build process. |
| |
| build |
| Contains build scripts/makefiles, project files, project workspace, |
| etc. to build the project. In particular, it contains one Makefile |
| file to build the project with GNU build systems, and a *.dsw |
| workspace file to build the library with Microsoft Visual Studio 6 or |
| later. |
| |
| build/output |
| The build/output directory contains the object files and other files |
| generated by the build process. To support building multiple targets |
| with a single source tree, each build target will occupy a different |
| subdirectory under this directory. |
| |
| build/wince-evc4 |
| This directory contains the project/workspace files to build Windows |
| CE/WinCE version of the project using Microsoft Embedded Visual C++ |
| 4. |
| |
| build/wince-evc4/output |
| This directory contains the library, executable, and object files |
| generated by Windows Mobile build process. |
| |
| docs |
| Contains Doxygen configuration file (doxygen.cfg) to generate online |
| documentation from the source files. The output documentation will be |
| put in this directory as well (for example, docs/html directory for |
| the HTML files). |
| |
| (to generate Doxygen documentation from the source tree, just run |
| "doxygen docs/doxygen.cfg" in the individual project directory. The |
| generated files will reside in docs directory). |
| |
| include |
| Contains the header files for the project. |
| |
| lib |
| Contains libraries produced by the build process. |
| |
| src |
| Contains the source files of the project. |
| |
| |
| 2. Build Preparation |
| _________________________________________________________________ |
| |
| 2.1 Create config_site.h file |
| _________________________________________________________________ |
| |
| Before source files can be built, the pjlib/include/pj/config_site.h file |
| must be created (it can just be an empty file). |
| |
| Note: |
| When the Makefile based build system is used, this process is taken |
| care by the Makefiles. But when non-Makefile based build system (such |
| as Visual Studio) is used, the config_site.h file must be created |
| manually. |
| |
| |
| What is config_site.h File |
| |
| The pjlib/include/pj/config_site.h contains local customizations to the |
| libraries. |
| |
| All customizations should be put in this file instead of modifying PJ's |
| files, because if PJ's files get modified, then those modified files will |
| not be updated the next time the source is synchronized. Or in other case, |
| the local modification may be overwritten with the fresh copy from the SVN. |
| |
| Putting the local customization to the config_site.h solves this problem, |
| because this file is not included in the version control, so it will never |
| be overwritten by "svn update" command. |
| |
| Please find list of configuration macros that can be overriden from these |
| files: |
| * PJLIB Configuration (the pjlib/config.h file) |
| * PJLIB-UTIL Configuration (the pjlib-util/config.h file) |
| * PJMEDIA Configuration (the pjmedia/config.h file) |
| * PJSIP Configuration (the pjsip/sip_config.h file) |
| |
| A sample config_site.h file is also available in |
| pjlib/include/config_site_sample.h. |
| |
| |
| Creating config_site.h file |
| |
| The simplest way is just to create an empty file, to use whetever default |
| values set by the libraries. |
| |
| Another way to create the config_site.h file is to write something like the |
| following: |
| |
| |
| // Uncomment to get minimum footprint (suitable for 1-2 concurrent calls |
| only) |
| //#define PJ_CONFIG_MINIMAL_SIZE |
| // Uncomment to get maximum performance |
| //#define PJ_CONFIG_MAXIMUM_SPEED |
| #include <pj/config_site_sample.h> |
| |
| |
| 2.2 Disk Space Requirements |
| _________________________________________________________________ |
| |
| The building process needs: |
| about 50-60 MB of disk space to store the uncompressed source files, and |
| * about 30-50 MB of additional space for building each target |
| |
| (Visual Studio Debug and Release are considered as separate targets) |
| |
| |
| 3. Building Linux, *nix, *BSD, and MacOS X Targets with GNU Build Systems |
| _________________________________________________________________ |
| |
| 3.1 Supported Targets |
| _________________________________________________________________ |
| |
| The new, autoconf based GNU build system can be used to build the |
| libraries/applications for the following targets: |
| * Linux/uC-Linux (i386, Opteron, Itanium, MIPS, PowerPC, etc.), |
| * MacOS X (PowerPC), |
| * mingw (i386), |
| * FreeBSD and maybe other BSD's (i386, Opteron, etc.), |
| * RTEMS with cross compilation (ARM, powerpc), |
| * etc. |
| |
| |
| 3.2 Requirements |
| _________________________________________________________________ |
| |
| In order to use PJ's GNU build system, these typical GNU tools are needed: |
| * GNU make (other make will not work), |
| * GNU binutils for the target, and |
| * GNU gcc for the target. |
| * OpenSSL header files/libraries (optional) if TLS support is wanted. |
| |
| In addition, the appropriate "SDK" must be installed for the particular |
| target (this could just be a libc and the appropriate system abstraction |
| library such as Posix). |
| |
| The build system is known to work on the following hosts: |
| * Linux, many types of distributions. |
| * MacOS X 10.2 |
| * mingw (Win2K, XP) |
| * FreeBSD (must use gmake instead of make) |
| |
| Building Win32 applications with Cygwin is currently not supported by the |
| autoconf script (there is some Windows header conflicts), but one can still |
| use the old configure script by calling ./configure-legacy. More over, |
| cross-compilations might also work with Cygwin. |
| |
| |
| 3.3 Running configure |
| _________________________________________________________________ |
| |
| Using Default Settings |
| |
| Run "./configure" without any options to let the script detect the |
| appropriate settings for the host: |
| |
| |
| |
| $ cd pjproject |
| $ ./configure |
| ... |
| |
| Notes: |
| The default settings build the libraries in "release" mode, with |
| default CFLAGS set to "-O2 -DNDEBUG". To change the default CFLAGS, |
| we can use the usual "./configure CFLAGS='-g'" construct. |
| |
| Features Customization |
| |
| With the new autoconf based build system, most configuration/customization |
| can be specified as configure arguments. The list of customizable features |
| can be viewed by running "./configure --help" command: |
| |
| |
| |
| $ cd pjproject |
| $ ./configure --help |
| ... |
| Optional Features: |
| --disable-floating-point Disable floating point where possible |
| --disable-sound Exclude sound (i.e. use null sound) |
| --disable-small-filter Exclude small filter in resampling |
| --disable-large-filter Exclude large filter in resampling |
| --disable-g711-plc Exclude G.711 Annex A PLC |
| --disable-speex-aec Exclude Speex Acoustic Echo Canceller/AEC |
| --disable-g711-codec Exclude G.711 codecs from the build |
| --disable-l16-codec Exclude Linear/L16 codec family from the build |
| --disable-gsm-codec Exclude GSM codec in the build |
| --disable-speex-codec Exclude Speex codecs in the build |
| --disable-ilbc-codec Exclude iLBC codec in the build |
| --disable-tls Force excluding TLS support (default is autodetected based on |
| OpenSSL availability) |
| ... |
| |
| Configuring Debug Version and Other Customizations |
| |
| The configure script accepts standard customization, which details can be |
| obtained by executing ./configure --help. |
| |
| Below is an example of specifying CFLAGS in configure: |
| |
| |
| |
| $ ./configure CFLAGS="-O3 -DNDEBUG -msoft-float -fno-builtin" |
| ... |
| |
| Configuring TLS Support |
| |
| By default, TLS support is configured based on the availability of OpenSSL |
| header files and libraries. If OpenSSL is available at the default include |
| and library path locations, TLS will be enabled by the configure script. |
| |
| You can explicitly disable TLS support by giving the configure script |
| --disable-tls option. |
| |
| |
| 3.4 Cross Compilation |
| _________________________________________________________________ |
| |
| Cross compilation should be supported, using the usual autoconf syntax: |
| |
| |
| |
| $ ./configure --host=arm-elf-linux |
| ... |
| |
| Since cross-compilation is not tested as often as the "normal" build, please |
| watch for the ./configure output for incorrect settings (well ideally this |
| should be done for normal build too). |
| |
| Please refer to Porting Guide for further information about porting PJ |
| software. |
| |
| |
| 3.5 Running make |
| _________________________________________________________________ |
| |
| Once the configure script completes successfully, start the build process by |
| invoking these commands: |
| |
| |
| |
| $ cd pjproject |
| $ make dep |
| $ make |
| |
| Note: |
| gmake may need to be specified instead of make for some hosts, to |
| invoke GNU make instead of the native make. |
| |
| |
| Description of all make targets supported by the Makefile's: |
| |
| all |
| The default (or first) target to build the libraries/binaries. |
| |
| dep, depend |
| Build dependencies rule from the source files. |
| |
| clean |
| Clean the object files for current target, but keep the output |
| library/binary files intact. |
| |
| distclean, realclean |
| Remove all generated files (object, libraries, binaries, and |
| dependency files) for current target. |
| |
| |
| Note: |
| make can be invoked either in the top-level PJ directory or in build |
| directory under each project to build only the particular project. |
| |
| |
| 3.6 Build Customizations |
| _________________________________________________________________ |
| |
| Build features can be customized by specifying the options when running |
| ./configure as described in Running Configure above. |
| |
| In addition, additional CFLAGS and LDFLAGS options can be put in user.mak |
| file in PJ root directory (this file may need to be created if it doesn't |
| exist). Below is a sample of user.mak file contents: |
| |
| |
| |
| export CFLAGS += -msoft-float -fno-builtin |
| export LDFLAGS += |
| |
| |
| 4. Building for Windows Targets with Microsoft Visual Studio |
| _________________________________________________________________ |
| |
| 4.1 Requirements |
| _________________________________________________________________ |
| |
| The Microsoft Visual Studio based project files can be used with one of the |
| following: |
| |
| * Microsoft Visual Studio 6, |
| * Microsoft Visual Studio .NET 2002, |
| * Microsoft Visual Studio .NET 2003, |
| * Microsoft Visual C++ 2005 (including Express edition), |
| |
| In addition, the following SDK's are needed: |
| * Platform SDK, if you're using Visual Studio 2005 Express (tested with |
| Platform SDK for Windows Server 2003 SP1), |
| * DirectX SDK (tested with DirectX version 8 and 9), |
| * OpenSSL development kit would be needed if TLS support is wanted, or |
| otherwise this is optional. |
| |
| For the host, the following are required: |
| * Windows NT, 2000, XP, 2003, or later , |
| * Windows 95/98 should work too, but this has not been tested, |
| * Sufficient amount of RAM for the build process (at least 256MB). |
| |
| |
| Enabling TLS Support with OpenSSL |
| |
| If TLS support is wanted, then OpenSSL SDK must be installed in the |
| development host. |
| |
| To install OpenSSL SDK from the Win32 binary distribution: |
| 1. Install OpenSSL SDK to any folder (e.g. C:\OpenSSL) |
| 2. Add OpenSSL DLL location to the system PATH. |
| 3. Add OpenSSL include path to Visual Studio includes search directory. |
| Make sure that OpenSSL header files can be accessed from the program |
| with #include <openssl/ssl.h> construct. |
| 4. Add OpenSSL library path to Visual Studio library search directory. Make |
| sure the following libraries are accessible: |
| + For Debug build: libeay32MTd and ssleay32MTd. |
| + For Release build: libeay32MT and ssleay32MT. |
| |
| Then to enable TLS transport support in PJSIP, just add |
| |
| #define PJSIP_HAS_TLS_TRANSPORT 1 |
| |
| in your pj/config_site.h. When this macro is defined, OpenSSL libraries will |
| be automatically linked to the application via the #pragma construct in |
| sip_transport_tls_ossl.c file. |
| |
| |
| 4.2 Building the Projects |
| _________________________________________________________________ |
| |
| Follow the steps below to build the libraries/application using Visual |
| Studio: |
| 1. For Visual Studio 6: open pjproject.dsw workspace file. |
| 2. For Visual Studio 8 (VS 2005): open pjproject-vs8.sln solution file. |
| 3. Set pjsua as Active Project. |
| 4. Select Debug or Release build as appropriate. |
| 5. Build the project. This will build pjsua application and all libraries |
| needed by pjsua. |
| 6. After successful build, the pjsua application will be placed in |
| pjsip-apps/bin directory, and the libraries in lib directory under each |
| projects. |
| |
| To build the samples: |
| 1. (Still using the same workspace) |
| 2. Set samples project as Active Project |
| 3. Select Debug or Release build as appropriate. |
| 4. Build the project. This will build all sample applications and all |
| libraries needed. |
| 5. After successful build, the sample applications will be placed in |
| pjsip-apps/bin/samples directory, and the libraries in lib directory |
| under each projects. |
| |
| 4.3 Debugging the Sample Application |
| _________________________________________________________________ |
| |
| The sample applications are build using Samples.mak makefile, therefore it |
| is difficult to setup debugging session in Visual Studio for these |
| applications. To solve this issue, the pjsip_apps workspace contain one |
| project called sample_debug which can be used to debug the sample |
| application. |
| |
| To setup debugging using sample_debug project: |
| 1. (Still using pjsip_apps workspace) |
| 2. Set sample_debug project as Active Project |
| 3. Edit debug.c file inside this project. |
| 4. Modify the #include line to include the particular sample application to |
| debug |
| 5. Select Debug build. |
| 6. Build and debug the project. |
| |
| |
| 5. Building for Windows Mobile Targets (Windows CE/WinCE/PDA/SmartPhone) |
| _________________________________________________________________ |
| |
| PJ supports building SIP and media stacks and applications for Windows |
| Mobile targets. A very simple WinCE SIP user agent (with media) application |
| is provided just as proof of concept that the port works. |
| |
| 5.1 Requirements |
| _________________________________________________________________ |
| |
| One of the following development tools is needed to build SIP and media |
| components for Windows Mobile: |
| * Microsoft Embedded Visual C++ 4 with appropriate SDKs, or |
| * Microsoft Visual Studio 2005 for Windows Mobile with appropriate SDKs. |
| |
| Note that VS2005 is not directly supported (as I don't have the tools), but |
| it is reported to work (I assumed that VS2005 for Windows Mobile can import |
| EVC4 workspace file). |
| |
| 5.2 Building the Projects |
| _________________________________________________________________ |
| |
| The Windows Mobile port is included in the main source distribution. Please |
| follow the following steps to build the WinCE libraries and sample |
| application: |
| 1. Open pjsip-apps/build/wince-evc4/wince_demos.vcw workspace file. If |
| later version of EVC4 is being used, this may cause the workspace file |
| to be converted to the appropriate format. |
| 2. Select pjsua_wince project as the Active Project. |
| 3. Select the appropriate SDK (for example Pocket PC 2003 SDK or SmartPhone |
| 2003 SDK) |
| 4. Select the appropriate configuration (for example, Win32 (WCE Emulator |
| Debug) to debug the program in emulator, or other configurations such as |
| ARMV4, MIPS, SH3, SH4, or whatever suitable for the device) |
| 5. Select the appropriate device (Emulator or the actual Device). |
| 6. Build the project. This will build the sample WinCE application and all |
| libraries (SIP, Media, etc.) needed by this application. |
| |
| Notes |
| |
| + If the config_site.h includes config_site_sample.h file, then |
| there are certain configuration in config_site_sample.h that get |
| activated for Windows CE targets. Please make sure that these |
| configurations are suitable for the application. |
| + The libraries, binaries and object files produced by the build |
| process are located under build/wince-evc4/output directory of each |
| projects. |
| |
| |
| 6. Older PJLIB Build System for Non-Autoconf Targets (e.g. RTEMS) |
| _________________________________________________________________ |
| |
| The old PJLIB build system can still be used for building PJ libraries, for |
| example for RTEMS target. Please see the Porting PJLIB page in PJLIB |
| Reference documentation for information on how to support new target using |
| this build system. |
| |
| 6.1 Supported Targets |
| _________________________________________________________________ |
| |
| The older build system supports building PJ libraries for the following |
| operating systems: |
| * RTEMS |
| * Linux |
| * MacOS X |
| * Cygwin and Mingw |
| |
| And it supports the following target architectures: |
| * i386, x86_64, itanium |
| * ARM |
| * mips |
| * powerpc |
| * mpc860 |
| * etc. |
| |
| For other targets, specific files need to be added to the build system, |
| please see the Porting PJLIB page in PJLIB Reference documentation for |
| details. |
| |
| 6.2 Invoking the Build System |
| _________________________________________________________________ |
| |
| To invoke the older build system, run the following: |
| |
| |
| |
| $ cd pjproject |
| $ ./configure-legacy |
| $ make dep && make clean && make |
| |
| |
| |
| 7. Running the Applications |
| _________________________________________________________________ |
| |
| Upon successful build, the output libraries (PJLIB, PJLIB-UTIL, PJMEDIA, |
| PJSIP, etc.) are put under ./lib sub-directory under each project directory. |
| In addition, some applications may also be built, and such applications will |
| be put in ./bin sub-directory under each project directory. |
| |
| |
| 7.1 pjsua |
| _________________________________________________________________ |
| |
| pjsua is the reference implementation for both PJSIP and PJMEDIA stack, and |
| is the main target of the build system. Upon successful build, pjsua |
| application will be put in pjsip-apps/bin directory. |
| |
| pjsua manual can be found in pjsua Manual Page. |
| |
| |
| 7.2 Sample Applications |
| _________________________________________________________________ |
| |
| Sample applications will be built with the Makefile build system. For Visual |
| Studio, you have to build the samples manually by selecting and building the |
| Samples project inside pjsip-apps/build/pjsip_apps.dsw project workspace. |
| |
| Upon successful build, the sample applications are put in |
| pjsip-apps/bin/samples directory. |
| |
| The sample applications are described in PJMEDIA Samples Page and |
| PJSIP Samples Page in the website. |
| |
| |
| 7.3 pjlib-test |
| _________________________________________________________________ |
| |
| pjlib-test contains comprehensive tests for testing PJLIB functionality. |
| This application will only be built when the Makefile build system is used; |
| with Visual Studio, one has to open pjlib.dsw project in pjlib/build |
| directory to build this application. |
| |
| If you're porting PJLIB to new target, it is recommended to run this |
| application to make sure that all functionalities works as expected. |
| |
| |
| 7.4 pjsip-test |
| _________________________________________________________________ |
| |
| pjsip-test contains codes for testing various SIP functionalities in PJSIP |
| and also to benchmark static performance metrics such as message parsing per |
| second. |
| |
| |
| |
| 8. Using PJPROJECT with Applications |
| _________________________________________________________________ |
| |
| Regardless of the build system being used, the following tasks are normally |
| needed to be done in order to build application to use PJSIP and PJMEDIA: |
| 1. Put these include directories in the include search path: |
| + pjlib/include |
| + pjlib-util/include |
| + pjmedia/include |
| + pjsip/include |
| 2. Put these library directories in the library search path: |
| + pjlib/lib |
| + pjlib-util/lib |
| + pjmedia/lib |
| + pjsip/lib |
| 3. Include the relevant PJ header files in the application source file. For |
| example, using these would include ALL APIs exported by PJ: |
| |
| #include <pjlib.h> |
| #include <pjlib-util.h> |
| #include <pjsip.h> |
| #include <pjsip_ua.h> |
| #include <pjsip_simple.h> |
| #include <pjsua.h> |
| #include <pjmedia.h> |
| #include <pjmedia-codec.h> |
| (Note: the documentation of the relevant libraries should say which |
| header files should be included to get the declaration of the APIs). |
| 4. Declare the OS macros. |
| + For Windows applications built with Visual Studio, we need to |
| declare PJ_WIN32=1 macro in the project settings (declaring the |
| macro in the source file may not be sufficient). |
| + For Windows Mobile applications build with Visual C++, we need to |
| declare PJ_WIN32_WINCE=1 macro in the project settings. |
| + For GNU build system/autoconf based build system, we need to |
| declare PJ_AUTOCONF=1 macro when compiling the applications. |
| (Note: the old PJ build system requires declaring the target processor |
| with PJ_M_XXX=1 macro, but this has been made obsolete. The target |
| processor will be detected from compiler's predefined macro by |
| pjlib/config.h file). |
| 5. Link with the appropriate PJ libraries. The following libraries will |
| need to be included in the library link specifications: |
| |
| pjlib |
| Base library used by all libraries. |
| |
| pjlib-util |
| Auxiliary library containing scanner, XML, STUN, MD5, getopt, |
| etc, used by the SIP and media stack. |
| |
| pjsip |
| SIP core stack library. |
| |
| pjsip-ua |
| SIP user agent library containing INVITE session, call |
| transfer, client registration, etc. |
| |
| pjsip-simple |
| SIP SIMPLE library for base event framework, presence, instant |
| messaging, etc. |
| |
| pjsua |
| High level SIP UA library, combining SIP and media stack into |
| high-level easy to use API. |
| |
| pjmedia |
| The media framework. |
| |
| pjmedia-codec |
| Container library for various codecs such as GSM, Speex, and |
| iLBC. |
| |
| |
| Note: the actual library names will be appended with the target name and the |
| build configuration. For example: |
| |
| For Visual Studio builds |
| The actual library names will look like |
| pjlib-i386-win32-vc6-debug.lib, |
| pjlib-i386-win32-vc6-release.lib, etc., depending on whether we |
| are building the Debug or Release version of the library. |
| |
| An easier way to link with the libraries is to include PJ |
| project files in the workspace, and to configure project |
| dependencies so that the application depends on the PJ |
| libraries. This way, we don't need to manually add each PJ |
| libraries to the input library file specification, since VS |
| will automatically link the dependency libraries with the |
| application. |
| |
| For Windows Mobile builds |
| Unfortunately the PJ libraries built for Windows Mobile will |
| not be placed in the usual lib directory, but rather under the |
| output directory under build/wince-evc4 project directory. |
| |
| An easier way to link with the libraries is to include PJ |
| project files in the workspace, and to configure project |
| dependencies so that the application depends on the PJ |
| libraries. This way, we don't need to manually add each PJ |
| libraries to the input library file specification, since VS |
| will automatically link the dependency libraries with the |
| application. |
| |
| For GNU builds |
| Application's Makefile can get the PJ library suffix by |
| including PJ's build.mak file from the root PJ directory (the |
| suffix is contained in TARGET_NAME variable). For example, to |
| link with PJLIB and PJMEDIA, we can use this syntax in the |
| LDFLAGS: "-lpj-$(TARGET_NAME) -lpjmedia-$(TARGET_NAME)" |
| |
| |
| 6. Link with system spesific libraries: |
| |
| Windows |
| Add (among other things): wsock32.lib, ws2_32.lib, ole32.lib, |
| dsound.lib |
| |
| Linux, *nix, *BSD |
| Add (among other things): '-lpthread -lm' (at least). |
| |
| MacOS X |
| Add (among other things): '-framework CoreAudio -lpthread -lm'. |
| |
| |
| Appendix I: Common Problems/Frequently Asked Question (FAQ) |
| _________________________________________________________________ |
| |
| I.1 fatal error C1083: Cannot open include file: 'pj/config_site.h': No such |
| file or directory |
| |
| This error normally occurs when the config_site.h file has not been created. |
| This file needs to be created manually (an empty file is sufficient). Please |
| follow the Build Preparation instructions above to create this file. |
| |
| |
| |
| |
| |
| |
| |
| |
| _________________________________________________________________ |
| |
| Feedback: |
| Thanks for using PJ libraries and for reading this document. Please |
| send feedbacks or general comments to <bennylp at pjsip dot org>. |
| |