http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Download
Installation
Build Instructions

API Docs
Samples
Schema

FAQs
Programming
Migration

Releases
Bug-Reporting
Feedback

Y2K Compliance
PDF Document

CVS Repository
Mail Archive

Questions
 


Building Xerces-C++ on Windows NT/98
 

Xerces-C++ comes with Microsoft Visual C++ projects and workspaces to help you build Xerces-C++. The following describes the steps you need to build Xerces-C++.

Building Xerces-C++ library
 

To build Xerces-C++ from it source (using MSVC), you will need to open the workspace containing the project. If you are building your application, you may want to add the Xerces-C++ project inside your applications's workspace.

The workspace containing the Xerces-C++ project file and all other samples is:

xerces-c-src1_6_0\Projects\Win32\VC6\xerces-all\xerces-all.dsw

Once you are inside MSVC, you need to build the project marked XercesLib.

If you want to include the Xerces-C++ project separately, you need to pick up:

xerces-c-src1_6_0\Projects\Win32\VC6\xerces-all\XercesLib\XercesLib.dsp

You must make sure that you are linking your application with the xerces-c_1.lib library and also make sure that the associated DLL is somewhere in your path.

NoteIf you are working on the AlphaWorks version which uses ICU, you must have the ICU data DLL named icudata.dll available from your path setting. For finding out where you can get ICU from and build it, look at the How to Build ICU.

Building samples
 

If you are using the source package, inside the same workspace (xerces-all.dsw), you'll find several other projects. These are for the samples. Select all the samples and right click on the selection. Then choose "Build (selection only)" to build all the samples in one shot.

If you are using the binary package, load the xerces-c1_6_0-win32\samples\Projects\Win32\VC6\samples.dsw Microsoft Visual C++ workspace inside your MSVC IDE. Then select all the samples and right click on the selection. Then choose "Build (selection only)" to build all the samples in one shot.



Building Xerces-C++ on Windows using Visual Age C++
 

A few unsupported projects are also packaged with Xerces-C++. Due to origins of Xerces-C++ inside IBM labs, we do have projects for IBM's Visual Age C++ compiler on Windows. The following describes the steps you need to build Xerces-C++ using Visual Age C++.

Building Xerces-C++ library
 

Requirements:

  • VisualAge C++ Version 4.0 with Fixpak 1:
    Download the Fixpak from the IBM VisualAge C++ Corrective Services web page.

To include the ICU library:

  • ICU Build:
    You should have the ICU Library in the same directory as the Xerces-C++ library. For example if Xerces-C++ is at the top level of the d drive, put the ICU library at the top level of d e.g. d:/xerces-c1_6_0 d:/icu.

Instructions:

  1. Change the directory to d:\xerces-c1_6_0\Projects\Win32
  2. If a d:\xerces-c1_6_0\Project\Win32\VACPP40 directory does not exist, create it.
  3. Copy the IBM VisualAge project file, XML4C2X.icc, to the VACPP40 directory.
  4. From the VisualAge main menu enter the project file name and path.
  5. When the build finishes the status bar displays this message: Last Compile completed Successfully with warnings on date.
NoteThese instructions assume that you install in drive d:\. Replace d with the appropriate drive letter.


Building Xerces-C++ on Windows using Borland C++Builder
 

Xerces-C++ comes with Borland C++Builder projects to help you build Xerces-C++. The following describes the steps you need to build Xerces-C++.

Building Xerces-C++ library
 

The library and demo projects are all contained in the Xerces-all project group:

  • xerces-c-src1_5_1\Projects\Win32\BCB5\Xerces-all\Xerces-all.bpg

Each project in the group refers a directory belog \Xerces-all. For example, the XercesLib project files are contained in the directory

  • xerces-c-src1_5_1\Projects\Win32\BCB5\Xerces-all\XercesLib

To build any project, open the project manager. Double click on the project name. Then select "Project|Build" from the menu. For example, double click on XercesLib.dll in the manager. Then select "Project|Build XercesLib" from the menu. Once the library has been built, include XercesLib.lib with in application's project and place XercesLib.dll somewhere in your path.



Building Xerces-C++ on UNIX platforms
 

Xerces-C++ uses GNU tools like Autoconf and GNU Make to build the system. You must first make sure you have these tools installed on your system before proceeding. If you don not have required tools, ask your system administrator to get them for you. These tools are free under the GNU Public Licence and may be obtained from the Free Software Foundation.

Do not jump into the build directly before reading this.

Spending some time reading the following instructions will save you a lot of wasted time and support-related e-mail communication. The Xerces-C++ build instructions are a little different from normal product builds. Specifically, there are some wrapper-scripts that have been written to make life easier for you. You are free not to use these scripts and use Autoconf and GNU Make directly, but we want to make sure you know what you are by-passing and what risks you are taking. So read the following instructions carefully before attempting to build it yourself.

Besides having all necessary build tools, you also need to know what compilers we have tested Xerces-C++ on. The following table lists the relevant platforms and compilers.

Operating System  C++, C Compilers 
Redhat Linux 6.1  g++, gcc (egcs) 
AIX 4.3  xlC_r, xlc_r 
Solaris 2.6  CC, cc 
HP-UX 11  aCC, cc 

If you are not using any of these compilers, you are taking a calculated risk by exploring new grounds. Your effort in making Xerces-C++ work on this new compiler is greatly appreciated and any problems you face can be addressed on the Xerces-C mailing list.

Differences between the UNIX platforms: The description below is generic, but as every programmer is aware, there are minor differences within the various UNIX flavors the world has been bestowed with. The one difference that you need to watch out in the discussion below, pertains to the system environment variable for finding libraries. On Linux and Solaris, the environment variable name is called LD_LIBRARY_PATH, on AIX it is LIBPATH, while on HP-UX it is SHLIB_PATH. The following discussion assumes you are working on Linux, but it is with subtle understanding that you know how to interpret it for the other UNIX flavors.

NoteIf you wish to build Xerces-C++ with ICU, look at the Building ICU. It tells you where you can get ICU and how to build Xerces-C++ with it.
Setting build environment variables
 

Before doing the build, you must first set your environment variables to pick-up the compiler and also specify where you extracted Xerces-C++ on your machine. While the first one is probably set for you by the system administrator, just make sure you can invoke the compiler. You may do so by typing the compiler invocation command without any parameters (e.g. xlc_r, or g++, or cc) and check if you get a proper response back.

Next set your Xerces-C++ root path as follows:

export XERCESCROOT=<full path to xerces-c-src1_6_0>

This should be the full path of the directory where you extracted Xerces-C++.


Building Xerces-C++ library
 

As mentioned earlier, you must be ready with the GNU tools like autoconf and gmake before you attempt the build.

The autoconf tool is required on only one platform and produces a set of portable scripts (configure) that you can run on all other platforms without actually having the autoconf tool installed everywhere. In all probability the autoconf-generated script (called configure) is already in your src directory. If not, type:

cd $XERCESCROOT/src
autoconf

This generates a shell-script called configure. It is tempting to run this script directly as is normally the case, but wait a minute. If you are using the default compilers like gcc and g++ you do not have a problem. But if you are not on the standard GNU compilers, you need to export a few more environment variables before you can invoke configure.

Rather than make you to figure out what strange environment variables you need to use, we have provided you with a wrapper script that does the job for you. All you need to tell the script is what your compiler is, and what options you are going to use inside your build, and the script does everything for you. Here is what the script takes as input:

runConfigure: Helper script to run "configure" for one of the supported platforms
Usage: runConfigure "options"
       where options may be any of the following:
       -p <platform> (accepts 'aix', 'linux', 'solaris',
            'hp-10', 'hp-11', 'unixware', 'os400', 'irix', 'ptx', 'tru64', 'macosx' )
       -c <C compiler name> (e.g. gcc, cc, xlc_r, icc)
       -x <C++ compiler name> (e.g. g++, CC, xlC_r, icc, c++)
       -d (specifies that you want to build debug version)
       -m <message loader> can be 'inmem', 'icu', 'MsgFile' or 'iconv'
       -n <net accessor> can be 'fileonly', 'libwww', 'socket' or 'native'
       -t <transcoder> can be 'icu', 'Iconv400', 'Iconv390' or 'native'
       -r <thread option> can be 'pthread' or 'dce' (only used on aix, HP-11 and solaris) or 'sproc' (only on IRIX) or 'none'
       -l <extra linker options>
       -z <extra compiler options>
       -P <install-prefix>
       -C <any one extra configure options>
       -h (to get help on the above commands)
NoteXerces-C++ can be built as either a standalone library or as a library dependent on International Components for Unicode (ICU). For simplicity, the following discussion only explains standalone builds.

One of the common ways to build Xerces-C++ is as follows:

runConfigure -plinux -cgcc -xg++ -minmem -nsocket -tnative -rpthread

The response will be something like this:

Generating makefiles with the following options ...
Platform: linux
C Compiler: gcc
C++ Compiler: g++
Extra compile options:
Extra link options:
Message Loader: inmem
Net Accessor: socket
Transcoder: native
Thread option: pthread
Extra configure options:
Debug is OFF

creating cache ./config.cache
checking for gcc... gcc
checking whether the C compiler (gcc  -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET ) works... yes
checking whether the C compiler (gcc  -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET ) is a cross-compiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
checking for c++... g++
checking whether the C++ compiler (g++  -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET ) works... yes
checking whether the C++ compiler (g++  -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET ) is a cross-compiler... no
checking whether we are using GNU C++... yes
checking whether g++ accepts -g... yes
checking for a BSD compatible install... /usr/bin/install -c
checking for autoconf... autoconf
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for XMLByte... no
checking host system type... i686-pc-linux-gnu
updating cache ./config.cache
creating ./config.status
creating Makefile
creating util/Makefile
creating util/Transcoders/ICU/Makefile
creating util/Transcoders/Iconv/Makefile
creating util/Transcoders/Iconv390/Makefile
creating util/Transcoders/Iconv400/Makefile
creating util/Transcoders/MacOSUnicodeConverter/Makefile
creating util/Platforms/Makefile
creating util/Platforms/Solaris/Makefile
creating util/Platforms/AIX/Makefile
creating util/Platforms/Linux/Makefile
creating util/Platforms/HPUX/Makefile
creating util/Platforms/OS390/Makefile
creating util/Platforms/OS400/Makefile
creating util/Platforms/IRIX/Makefile
creating util/Platforms/PTX/Makefile
creating util/Platforms/UnixWare/Makefile
creating util/Platforms/Tru64/Makefile
creating util/Platforms/MacOS/Makefile
creating util/Compilers/Makefile
creating util/MsgLoaders/InMemory/Makefile
creating util/MsgLoaders/ICU/Makefile
creating util/MsgLoaders/MsgCatalog/Makefile
creating util/MsgLoaders/MsgFile/Makefile
creating util/NetAccessors/Socket/Makefile
creating util/NetAccessors/libWWW/Makefile
creating util/NetAccessors/MacOSURLAccess/Makefile
creating util/regx/Makefile
creating validators/Makefile
creating validators/common/Makefile
creating validators/datatype/Makefile
creating validators/DTD/Makefile
creating validators/schema/Makefile
creating framework/Makefile
creating dom/Makefile
creating idom/Makefile
creating parsers/Makefile
creating internal/Makefile
creating sax/Makefile
creating sax2/Makefile
creating ../obj/Makefile

Having build problems? Read instructions at http://xml.apache.org/xerces-c/build.html
Still cannot resolve it? Find out if someone else had the same problem before.
Go to http://marc.theaimsgroup.com/?l=xerces-c-dev

In future, you may also directly type the following commands to create the Makefiles.

export TRANSCODER="NATIVE"
export MESSAGELOADER="INMEM"
export NETACCESSOR="Socket"
export THREADS="pthread"
export CC="gcc"
export CXX="g++"
export CXXFLAGS=" -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET"
export CFLAGS=" -O -DXML_USE_NATIVE_TRANSCODER -DXML_USE_INMEM_MESSAGELOADER -DXML_USE_PTHREADS -DXML_USE_NETACCESSOR_SOCKET"
export LDFLAGS=""
export LIBS=" -lpthread "
configure

If the result of the above commands look OK to you, go to the directory
/home/build/linux_xml4c/xerces-c-src1_5_2/src and type "gmake" to make the XERCES-C system.
NoteThe error message concerning conf.h is NOT an indication of a problem. This code has been inserted to make it work on AS/400, but it gives this message which appears to be an error. The problem will be fixed in future.

So now you see what the wrapper script has actually been doing! It has invoked configure to create the Makefiles in the individual sub-directories, but in addition to that, it has set a few environment variables to correctly configure your compiler and compiler flags too.

Now that the Makefiles are all created, you are ready to do the actual build.

gmake

Is that it? Yes, that's all you need to build Xerces-C++.


Building samples
 

The installation process for the samples is same on all UNIX platforms.

cd xerces-c1_6_0-linux/samples
./runConfigure -p<platform> -c<C_compiler> -x<C++_compiler>
gmake

This will create the object files in each sample directory and the executables in ' xerces-c1_6_0-linux/bin' directory.

Note that runConfigure is just a helper script and you are free to use ./configure with the correct parameters to make it work on any platform-compiler combination of your choice. The script needs the following parameters:

Usage: runConfigure "options"
       where options may be any of the following:
       -p <platform> (accepts 'aix', 'unixware', 'linux', 'solaris',
'hp-10', 'hp-11', 'os400', 'irix', 'ptx', 'tru64', 'macosx')
       -c <C compiler name> (e.g. gcc, xlc or icc)
       -x <C++ compiler name> (e.g. g++, xlC, or icc)
       -d (specifies that you want to build debug version)
       -h (get help on the above commands)
       -z <extra compiler options>
NoteNOTE:The code samples in this section assume that you are are working on the Linux binary drop. If you are using some other UNIX flavor, please replace '-linux' with the appropriate platform name in the code samples.

To delete all the generated object files and executables, type:

gmake clean


Building Xerces-C++ as a single-threaded library on Unix platforms
 

To build a single-threaded library on Unix platforms you have to update one or more of the following files Makefile.incl, Makefile.in, runConfigure. The following steps guide you to create a single-threaded library for each platform:

For Aix -

  • Replace xlc_r and xlC_r libraries with xlc and xlC respectively
  • Replace makeC++SharedLib_r with makeC++SharedLib
  • Remove the flag -D_THREAD_SAFE
  • Remove inclusion of any threaded library directories from the LIBPATH
  • Remove inclusion of -lpthreads and -lpthread_compat
  • Add -DAPP_NO_THREADS to define the variable under AIX specific options in Makefile.incl

For Solaris -

  • Add -DAPP_NO_THREADS to define the variable under SOLARIS specific options in Makefile.incl
  • Remove compiler switch -mt
  • Remove -D_REENTRANT flag from the 'compile' options
  • Remove inclusion of -lpthread

For Linux -

  • Add -DAPP_NO_THREADS to define the variable under LINUX specific options in Makefile.incl
  • Remove -D_REENTRANT flag from the 'compile' options
  • Remove inclusion of -lpthread

For HPUX -

  • Add -DAPP_NO_THREADS to define the variable under HP specific options in Makefile.incl
  • Remove inclusion of -lpthread and -lcma
  • Remove threading defines like -D_PTHREADS_DRAFT4 , -DXML_USE_DCE


Copyright © 2001 The Apache Software Foundation. All Rights Reserved.