diff options
Diffstat (limited to 'ACE-INSTALL.html')
-rw-r--r-- | ACE-INSTALL.html | 2073 |
1 files changed, 0 insertions, 2073 deletions
diff --git a/ACE-INSTALL.html b/ACE-INSTALL.html deleted file mode 100644 index 3c9c5a839d0..00000000000 --- a/ACE-INSTALL.html +++ /dev/null @@ -1,2073 +0,0 @@ -<!-- $Id$ --> - -<HTML> -<HEAD> - <TITLE>Building and Installing ACE and Its Network Services</TITLE> - <link rev=made href="mailto:schmidt@cs.wustl.edu"> -</HEAD> - -<BODY text = "#000000" - link = "#000fff" - vlink = "#ff0f0f" - bgcolor = "#ffffff"> - -<HR> -<H3>Building and Installing ACE and Its Network Services</H3> - -<H4>Synopsis</H4> - -The file explains how to build and install ACE and its Network -Services on the various OS platforms and compilers that it has been -ported to. Please consult the <A HREF="ChangeLog">ChangeLog</A> file -to see whether any recent changes to the release will affect your -code. You also might want to read the ACE <A -HREF="http://www.cs.wustl.edu/~schmidt/ACE.FAQ.html">FAQ</A> before -building and installing ACE. In addition, you might want to check out -our <A -HREF="http://www.cs.wustl.edu/~schmidt/ACE-development4.ps.gz">development -process</A>, as well. And as you start working with ACE, you might -want to consult the <a href="docs/ACE-FMM.html">ACE Frequently Made -Mistakes page</a>. If you encounter any problems or would like to request -an enhancement, then use our -<a href="http://www.cs.wustl.edu/~schmidt/ACE_wrappers/docs/usage-bugzilla.html">bug tracking system</a> to submit a report.<P> - - -<H4>Document Index</H4> - -<UL> - <LI><A HREF="#platforms">Supported Platforms and C++ Compilers</A> - <LI><A HREF="#installnotes">Installation Notes for Supported Platforms</A> - <LI><A HREF="#g++">Compiling ACE with GNU g++</A> - <LI><A HREF="#egcs">Compiling ACE with egcs</A> - <LI><A HREF="#aceinstall">Building and Installing ACE</A> - <LI><A HREF="#svcsinstall">Building and Installing ACE Network Services</A> - <LI><A HREF="#minimum_build">What Do I Need to Build for TAO?</A> - <LI><A HREF="#resource_requirements">System Resource Requirements</A> - <LI><A HREF="#advanced">Advanced Topics</A> -</UL> - - -<P><HR><P> -<H3><A NAME="platforms">Supported Platforms and C++ Compilers</A></H3> - -<!--#include virtual="/~schmidt/ACE-versions-i.html" --> - -<p>The following table summarizes platforms on which ACE runs:<P> - -<table width="100%" border=1> - <tr valign=top> - <td><b>Fully supported, i.e., continually tested and used daily</b></td> - <td>Solaris 2.5, 2.6, and 7, Windows NT 4.0 (MSVC++ 5.0, and 6.0), - Linux/Intel, Linux/Alpha, VxWorks, LynxOS, Digital UNIX 4.0 and 5.0, - HP/UX 10.x and 11.x, AIX 4.x, IRIX 6.x, and QNX Neutrino 2.0 - </td> - </tr> - <tr valign=top bgcolor="#AFAFAF"> - <td><b>Nearly fully supported, i.e., periodically tested</b></td> - <td>Windows 95, MVS, DEC Alpha Windows NT (MSVC++ 5.0, 6.0), Chorus, - PharLap TNT Embedded ToolSuite 9.1 - </td> - </tr> - <tr valign=top> - <td><b>Partially supported, i.e., infrequently tested</b></td> - <td> Windows NT (Borland C++ Builder 4.0 and IBM VisualAge C++), - Windows CE, Tandem, SCO, UnixWare, SunOS 4.x, FreeBSD, NetBSD, - Linux/PPC. - </td> - </tr> - <tr valign=top bgcolor="#AFAFAF"> - <td><b>Planned support, i.e., pending</b></td> - <td> pSoS, </td> - </tr> -</table> - -<P>Any UNIX/POSIX/Win32 variation is a potential target platform for -TAO. If you have <A HREF="docs/ACE-porting.html">porting -questions</A> or have a problem compiling the ACE wrappers on the -platforms shown above please send email to either <A -HREF="news:comp.soft-sys.ace">ACE Newsgroup</A> or the <A -HREF="mailto:ace-users@cs.wustl.edu">ACE mailing list</A> and we'll -try to help you fix the problems. - - -<P><HR><P> -<H3><A NAME="installnotes">Installation Notes for Supported Platforms</A></H3> - -<UL> - <LI><B>Win32 (Windows NT/i386, NT/Alpha and Windows '95) </B><P> - - All of ACE has been ported to the Win32 API (which includes - Windows NT, Windows 2000, and Windows '95/98). The entire -release now compiles - using the Microsoft Visual C++ 5.0, and 6.0 compilers (the - 2.0 compiler may also work, but we haven't tested it recently). - ACE can be built as both a static (LIB) and dynamic (DLL) - library, using the Win32 installation process described below.<P> - - Please see the <A HREF="#Non-static Object Manager">Non-static - ACE_Object_Manager</A> discussion below.<p> - - We've also added some support for Borland C++ Builder 4.0 and - IBM's VisualAge C++ compiler. Since we don't have these - compilers we rely on the ACE+TAO users community to maintain - these ports. Therefore, please send email to the ACE mailing - list if you run into problems. <P> - - <li><b>Windows CE</b><p> - - Most of ACE has been ported to Windows CE using Visual C++ 5.0 - with CE Toolkit. ACE has been tested on x86 Emulator and an HP - 360LX with an SH series CPU. Please be sure to read this file - (<a href="docs/CE-status.txt">CE-status.txt</a>) for up-to-date - information about ACE on CE. ACE can only be built as DLL - library now.<p> - - <LI><B> Sun OS 5.x/4.x (a.k.a. Solaris 2.x/1.x, Solaris 7) using Sun - CC 3.0.1, Sun C++ 4.2 and 5.x, Centerline C++ 2.x, GNU gcc 2.7.x - and later (except 2.8.x), and KAI C++ 3.3/3.4.</B><P> - - All the source code and tests should build and run without any - problems on Solaris 2.5.1, 2.6 and 7 platforms using the Sun C++ - compiler. We use this version/patchlevel of Sun C++:<p> <pre> - CC: WorkShop Compilers 4.2 21 Apr 1997 C++ 4.2 patch 104631-02 - </pre><p> - - There are likely to be build problems with older versions or - different patchlevels of Sun C++.<p> - - Thanks to Susan Liebeskind <shl@janis.gtri.gatech.edu> - for providing the following useful information:<p> - - The home page for Sun technical patches is <a - href="http://access1.sun.com">http://access1.sun.com</a>. - Searching for 104631 will bring you to a page allowing you to - access the latest version of the C++ 4.2 patches.<p> - - By default, ACE uses both the Solaris and POSIX thread - interface. To disable use of the Solaris thread interface, add - <code>-D_POSIX_PTHREAD_SEMANTICS</code> to the - <code>CFLAGS</code> in your - <code>ACE_wrappers/include/makeinclude/platform_macros.GNU</code>. - See the Solaris Intro (3) man page for more information.<p> - - To disable ACE thread support completely, build with the - <code>threads=0</code> make flag. See the <a - href="#flags">Makefile Flags</a> section below for more - information on make flags.<p> - - If you use g++ or egcs on Solaris 7, you might need to rebuild - it on a SunOS 5.7 (Solaris 7) host. Some versions of g++ and - egcs provide replacements for system header files. The - replacements on older SunOS systems are not compatible with the - SunOS 5.7 system headers. See <a - href="http://www.cs.wustl.edu/~levine/Hints.html">David Levine's - Hints page</a> for instructions on how to build egcs on a SunOS - 5.7 host, using a g++ or egcs that was built on an older SunOS - host. <P> - - The Sun/C++ 5.0 compilers has several problems with templates, - we have worked around most of them but this is not a compiler - that we test very often. Hopefully as new patches for the - compiler show up we will be able to make that our compiler of - choice on Solaris.</p> - - <LI><B>Sun OS 4.1.x using Centerline C++ 2.x, Sun CC 3.x, and Lucid - Energize 3.2.</B><P> - - Note that shared libraries do not interact very well with - Centerline C++ or Sun C++ on SunOS 4.1.x. This is due to odd - behavior of the SunOS 4.1.x linker, which (1) does not properly - call constructors of global objects within shared libraries and - (2) does not call the init() and fini() functions in shared - libraries, even though the manual claims that these functions - are called! In particular, this means that the tests in the - directory $ACE_ROOT/tests/Service_Configurator/IPC-tests/server/ - will not work for statically linked services.<P> - - Some versions of SunOS 4.1.x do not contain the - /usr/lib/libnsl.a library. This library seems to be optional - since System V Transport Layer Interface (TLI) support is - optional on SunOS 4.1.x (in contrast, it's the "preferred" - transport interface on Solaris).<P> - - The best work-around for now is probably to either add a dummy - libnsl.a in /lib (which may not be feasible) or simply comment - out the line:<P> - - LIBS += -lnsl<P> - - in the - <CODE>$ACE_ROOT/include/makeinclude/wrapper_macros.GNU</CODE> - file. Naturally, any programs, e.g., the TLI_SAP tests, that - use the TLI wrappers aren't going to work!<P> - - Note that on SunOS 4.x you may get warnings from the linker that - "archive has no table of contents; add one using ranlib(1)" for - certain libraries, e.g., libASX.a, libThreads.a, and libSPIPE.a. - This occurs since SunOS 4.x does not support these features.<P> - - <LI><B>AIX</B><P> - - The ACE port to AIX assumes that the user has installed the AIX - patch containing the dl*() APIs. To use these APIs, IBM has - created a separate product (free to AIX licensees) called shared - library hookable symbols (or slhs/6000). If you don't have this - patch, the sv* commands for compiling and linking will not be - present on the system.<P> - - If you are using AIX 4.2.1 or later, this patch isn't needed; - the dynamic library APIs are included in the base operating - system.<p> - - However, another patch may be needed. Thanks to - Susan Liebeskind <shl@janis.gtri.gatech.edu> for submitting - the following useful information:<p> - - When building on AIX 4.2.1, using the xlC V3.1 compilers, you may - get the following error when building the ACE shared library.<p> - <pre> -makeC++SharedLib_r -p 0 -o libACE.so -bI:/lib/pse.exp -L/usr/local/src/ACE_wra -ppers/ace -L./ -ltli_r -ldl libACE.a -ld: 0711-317 ERROR: Undefined symbol: .__CurrentException -ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information. -make: *** [libACE.so] Error 8 - </pre> - - To fix this error, you need a patch to the supporting xlC - related libraries. To obtain this patch, go to the <a - href="http://service.software.ibm.com/support/rs6000">IBM public - patch website</a>, and retrieve the patch PTF U453697, or its - successor, for xlC.<p> - - You may wish to retrieve this patch with the fixdist tool, also - available at the website. Installation of this patch will - install patched versions of the C++ libraries, which correctly - define this symbol.<p> - - To build ACE on AIX with Visual Age C++, use the - $ACE_ROOT/ace/ace-dll.icc (or ace-lib.icc) along with the appropriate - version-specific config file (e.g. config-aix-4.3.x.h). All of the - version-specific config files set the version number macros and - include the general config-aix-4.x.h file which has support for all - of the OS versions and compilers supported on AIX. Using the general - config file is the recommended practice for egcs, C Set++, and IBM - C/C++ compilers. However, the Visual Age C++ compiler does not make - use of the platform_macros.GNU file, which is how the OS version - information generally gets set.<p> - - BTW, here's a technique from Rob Jordan <<A - HREF="mailto:jordan@hursley.ibm.com">jordan@hursley.ibm.com</A>> - that can reduce the size of the ACE libraries by about one - third, and can also be applied to applications. It works by - optimising the sharing of template functions, which are created - in an ``unusual'' way under AIX. It also speeds up - compilation.<P> - - Here's how to optimise the ACE library generation:<P> - - Look at the <A - HREF="ace/Makefile">Makefile</a> - in <CODE>$ACE_ROOT/ace</CODE>. Create a file called - <CODE>ACE_All_Src.cpp</CODE>, and add a line to #include - each of the source files - listed under <CODE>FILES=</CODE> in the Makefile. Create a - file called <CODE>ACE_All_Tmp.h</CODE> - and add a line to #include each of the .h files listed under - <CODE>TEMPLATE_FILES=</CODE> in the Makefile. Now update the Makefile so that - <CODE>FILES=ACE_All_Src</CODE> and <CODE>TEMPLATE_FILES=ACE_All_Tmp</CODE>.<P> - - <LI><B><a name="Linux">Linux</a></B><P> - - ACE has been ported to <A - HREF="http://www.cs.wustl.edu/~cleeland/ace/">Linux</A> on - Intel, Alpha, and PowerPC platforms. If you use a RedHat 5.x - distribution, it's best to use RedHat 5.1 or later. ACE works - without any modifications on RedHat 5.1 and later, and on - Debian 2.1 on both Intel and Alpha; use the - <code>include/makeinclude/platform_linux_lxpthreads.GNU</code> - and <code>ace/config-linux-lxpthreads.h</code> platform/config - files. The same files can be used on PowerPC, with LinuxPPC - 1999 (R5), with glibc 2.1.1.<p> - - If you run out of memory, it's easy to add virtual memory on - Linux. Please see the <code>mkswap</code> man page. You'll - need around 256 to 300 Mb of virtual memory (RAM + swap) to - compile all of ACE+TAO. The <a href="#resource_requirements">System - Resource Requirements section</a> has some suggestions on how - to reduce the memory requirement.<p> - - The glibc 2.0 dynamic loader isn't thread safe. If you want to - use the Invocation API you'll have to set - <code>LD_BIND_NOW=true</code>. If you want to use - <code>dlopen</code>, you should use <code>RTLD_NOW</code>. The - dynamic loader in glibc 2.1 is thread safe.<p> - - The ACE <code>Tokens_Test</code> hangs with egcs 1.1b on Linux. - It runs properly when built with egcs 1.0.2 and later. All other - ACE tests run properly with these egcs 1.0.2 and later.<p> - - <strong>NOTE:</strong> The TAO NameService uses IP multicasting - by default, though it is not required. IP multicast on Linux - requires the following:<p> - - <ul> - <li>Enable IP multicast in the Linux kernel. It is enabled in - the default RedHat 5.1 kernel. In older distributions, you - can enable it by rebuilding your kernel with CONFIG_IP_MULTICAST - enabled.<p> - <li>Enable IP multicast in ACE. It is enabled by default in - <code>ace/config-linux-common.h</code>. If you don't use - IP multicast, add <code>#define ACE_HAS_IP_MULTICAST 0</code> - to your <code>ace/config.h</code> before building ACE.<p> - <li>There must be a network interface that is up and supports - multicast. If you have linuxconf, it's easiest to use that - to add a network route for multicast (224.0.0.0) on one of - your network interfaces, such as <code>eth0</code>. If - you don't have or use linuxconf, try adding a multicast - routing table entry using something like this:<p> - <pre> - <code># route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0</code> - </pre><p> - </ul> - - With RedHat 5.0, you'll need some <a - href="os-patches/linux-patches.html">updates and possibly some - patches</a> to get ACE working with LinuxThreads. Some of the - patches are necessary with Alpha CPUs and with some older - kernels. egcs 1.0.1 can also be used, but it may need patches, - described there, as well.<p> - - <strong>NOTE:</strong> Be careful when installing egcs on RedHat - systems. If you don't remove your old gcc and libg++ RPMs, it's - best to install egcs in a different directory than - <code>/usr</code>, such as <code>/usr/local</code>, and set your - <code>PATH</code> and <code>LD_LIBRARY_PATH</code> - accordingly.<p> - - Some of the ACE tests fail on older, pre-glibc2 Linux platforms, - such as RedHat 4.2. The problems are with threads and - thread-specific storage.<p> - - <LI><B>SCO UNIX</B><P> - - ACE has been ported to SCO UNIX using the GNU g++ 2.7.2 - compiler. Arturo Montes <<A - HREF="mailto:mitosys@colomsat.net.co">mitosys@colomsat.net.co</A>> - maintains this code. In addition, he also maintains a version - of <A HREF="FSU-threads.tar.gz">FSU pthreads</A>.<P> - - <LI><B>SGI IRIX 5.x and 6.x</B><P> - - ACE used to build fine using the SGI C++ and GNU GCC compilers - for IRIX 5.x. It has been ported to IRIX 6.x using the SGI - MipsPro 7.1 C++ compiler; be aware that in IRIX 6.2 there is a - number of patches that have to be installed and exceptions - appear to fail with the O32 ABI. Please check the config files - for the details.<P> - - <LI><B> HP-UX 9.x, 10.x, and 11.00 </B> <P> - - HP sells 2 C++ compilers for HP-UX 10.x and 11.00. If you are - using 9.x, there's only the first one. - - <UL> - <LI>HP C++ - this is CC, HP's cfront-based compiler. As of ACE 4.4, it - can be used, but some people have problems with templates. - Caveat emptor. It's been said that you should run version 10.24, - if not later. - - <LI>HP aC++ - this is aCC, HP's new, ANSI compiler. It handles ACE - pretty well. You should use version A.01.18 (or higher) on - HP-UX 10.x and version A.03.13 (or higher) on HP-UX 11.00. - - </UL> - <P> - On HP-UX 10.20, a patch is required to compile ACE. The exact patch - number depends on the platform - check with HP's patch database to - locate the exact patch or its successor. For 9000 700 series machines - it is PHKL_8693 (s700 10.20 sys/time.h fix for select(2)/C++ defects).<p> - - Also see further notes on this platform at Riverace's - <A HREF="http://www.riverace.com/FAQ/faq.html">Frequently Asked - Questions</A> page. - <P> - - <LI><B>OSF/1 3.2 and 4.0 (a.k.a. Digital UNIX 4.0)</B> <P> - - The Digital UNIX C++ 5.4 through 5.7 compilers have problems - with ACE's templates. They compile the lib and most of the test - programs, although they warn about template usage. Most tests - run, some dump core. If you use a 5.x version of cxx, be sure - to set the CXX_VER variable to CXX_5, either on your make - command line or in an environment variable. The ACE Makefiles - assume by default that the cxx version is 6.x or later.<P> - - CXX 6.0 and 6.1 are much improved over 5.x: V6.0-020, V6.1-025, - and later build all of ACE cleanly. All of the tests in - ACE_wrappers/tests run successfully with CXX 6.0 and CXX 6.1. - Please note that problems have been reported with some versions - of CXX 6.1, notably versions -021 and earlier. It's best to use - V6.1-022 or later.<p> - - NOTE: if you use Digital UNIX 4.0f or later, you <strong>must</strong> - use <code>ace/config-tru64.h</code> instead of - <code>ace/config-osf1-4.0.h</code>. <code>ace/config-tru64.h</code> - can be used for all supported compilers on any version of - Digital UNIX after and include 4.0. And, with 4.0f and later when - using Digital CXX, you <strong>must</strong> use - <code>include/makeinclude/platform_tru64_cxx.GNU</code> instead of - <code>include/makeinclude/platform_osf1_4.0.GNU</code>. - - GNU gcc 2.7.2.1 compiles without problems. All tests run - (besides minor problems). Thanks to Thilo Kielmann <<A - HREF="mailto:kielmann@informatik.uni-siegen.de">kielmann@informatik.uni-siegen.de</A>> - and David Trumble <<A - HREF="mailto:trumble@cvg.enet.dec.com">trumble@cvg.enet.dec.com</A>> - for help with this port.<P> - - <li><b> FreeBSD </b><p> - - FreeBSD is a fast evolving platform. However, it has the - advantage of having standard releases. At this moment, ACE is - only perodically tested against -stable (3.1R) and we rely a lot - on FreeBSD users' feedbacks. <p> - - Notice that on older FreeBSD, <code>ld.so</code> only looks for - so libraries with <b>version number</b> appended. ACE makefiles - create symlink for most shared libraries if - <code>versioned_so</code> is defined to 1 in - <code>$ACE_ROOT/ace</code> with appropriate ACE version. - However, this does not work for libACE.so itself so you have to - create it manually (If you figure out how to do this, please let - us know) like this: <p> - - <code>ln -sf $ACE_ROOT/ace/libACE.so $ACE_ROOT/ace/libACE.so.4.5</code><p> - - On newer FreeBSD (3.0 or later,) this is no longer necessary.<p> - - <li><b>NetBSD</b><p> - - Like older FreeBSD, NetBSD's <code>ld.so</code> also requires - versioned .so files.<p> - - <LI><B> UnixWare </B> <P> - - Steve Huston <<A - HREF="mailto:shuston@riverace.com">shuston@riverace.com</A>> - has ported ACE to work with UnixWare 2.01 and g++.<P> - - Ganesh Pai <<A - HREF="mailto:gpai@voicetek.com">gpai@voicetek.com</A>> - subsequently did the port for version 2.1.2, also with g++.<P> - - <LI><B>Chorus</B> <P> - - Wei Chiang <<A - HREF="mailto:chiang@tele.nokia.fi">chiang@tele.nokia.fi</A>> - has ported ACE to Chorus 3.1 using GNU g++ 2.7.2.<P> - - <LI><B><a name="LynxOS">LynxOS</a></B><P> - - ACE builds and runs properly on LynxOS 3.0.0 for Intel and - PowerPC targets. - ACE's Naming_Test fails; it is disabled in <a - href="tests/run_tests.sh"><code>ACE_wrappers/tests/run_tests.sh</code></a>.<p> - - If you run out of memory on LynxOS, these might help:<p> - - <ul> - <li>Increase the limits in <code>/etc/starttab</code>, - then logout and login again. We use these limits: - <pre> -# Data, stack, and core file limits (in Kbytes) -240000 -80000 -102400</pre><p> - <li>Enable or expand virtual memory, with something like: - <pre> -# mkcontig /swap 320 -# prio 17 vmstart /swap</pre> - See the <code>mkcontig</code> and <code>vmstart</code> - man pages, and <code>/bin/rc</code>.<p> - </ul> - - Please see the comments in the - <a href="include/makeinclude/platform_lynxos.GNU">ACE - platform_lynxos.GNU file</a> for information on, and an - example of, tailoring for your particular platform.<p> - - We actively maintain ACE on LynxOS 3.0.0. It should build and - run on LynxOS 2.5, but we no longer test on that OS version.<p> - - NOTE: if you want to use IP multicast on LynxOS, be sure to add - this line to your <code>/net/rc.network</code>, and reboot:<p> - <pre><code> - /bin/route add "224.0.0.0" "$my_name" - </code></pre> - - Dave Mayerhoefer <<A - HREF="mailto:davem@lynx.com">davem@lynx.com</A>> has ported - ACE to LynxOS 2.5 using GNU g++ 2.7.2. However, you may need to - apply some <A HREF="os-patches/lynxos-patches.html">patches to - LynxOS</A> to get ACE working.<P> - - <LI><STRONG>VxWorks</STRONG><P> - - <A HREF="http://www.cs.wustl.edu/~levine/">David Levine</A> - <<A - HREF="mailto:levine@cs.wustl.edu">levine@cs.wustl.edu</A>> has - ported ACE to VxWorks 5.2/5.3/5.3.1/5.4 with the GreenHills - 1.8.8/1.8.9 and g++ compilers that are distributed with - VxWorks/Tornado. An anonymous contributor has also - provided <a href="os-patches/vxworks-5.1.txt">notes for using - ACE with VxWorks 5.1.</a><P> - - Tornado II/VxWorks 5.4 support IP multicast. That is not enabled - by default in ACE for VxWorks, because it probably depends on - kernel configuration. To enable it, add - <code>#define ACE_HAS_IP_MULTICAST</code> to your - <code>ace/config.h</code>.<p> - - In addition to all of the other benefits of ACE, it helps work - around some deficiencies with VxWorks 5.3/5.3.1. Some of these - apply only with g++, at least thru version 2.7.2. That is the - version that is shipped with Tornado 1.0.1/ VxWorks 5.3.1. The - problems are:<P> - - <OL> - <LI>The program entry point cannot be called ``main'' with g++. ACE - renames it to ``ace_main'' (configurable via ACE_MAIN) on VxWorks. - While this may seem trivial, it is important with legacy code. - ACE itself ran into this problem.<P> - - <LI>argc/argv isn't used with VxWorks entry points. ACE provides - a wrapper function that transparently converts shell command - line arguments to argc/argv form. See <A HREF="#spa">below</a> - for details.<P> - - <LI>Unsigned long long support is not available with the g++ that - is distributed with Tornado 1.0.1/VxWorks 5.3.1, or with - GreenHills 1.8.8. The documentation says that it is supported - by g++, but try using it :-) Wind River technical support verified - that it doesn't work. ACE provides its own 64-bit unsigned integer - type, ACE_hrtime_t, so you don't even have to worry about this - problem if you use it.<P> - - <LI>There a gory problem with munch that is severely aggravated - by the presence of a static in the Wind River/g++ iostream.h. - ACE hides this and provides an easy-to-use workaround in the - very unlikely situation where it becomes a problem. - Please see ace/config-vxworks5.2-g++.h for more information.<P> - </OL> - - In addition, as noted <A HREF="#g++">below</A> following the - discussion of the g++ -fno-implicit-templates option, - -fno-implicit-templates is broken for x86 targets. And, -O2 - is not supported on some targets.<P> - - Please note that ACE uses one of the spare fields in the Wind - River task control block, spare4, for thread- specific storage. - This field is specified in only one place, in ace/OS.i, so it - can easily be changed to one of the other spare fields, if - necessary.<P> - - Versions of ACE from 4.3.3 and beyond destroy dynamically - allocated singletons in the ACE library. But, they may not - properly destroy some static objects. If you have trouble - running a program multiple times, it may be necessary to unload - the module, using unld, and reload it between runs. - Alternatively, you could try calling <code>cplusDtors</code> and - then <code>cplusCtors</code> between runs.<P> - - <LI><B>MVS OpenEdition</B> <P> - - All of ACE has been ported to OpenEdition by Chuck Gehr <<A - HREF="mailto:gehr@sweng.stortek.com">gehr@sweng.stortek.com</A>>. - The ACE library, all the tests and most of the examples and apps - build clean. There are still some problems that need to be - ironed out:<P> - - MVS does not support the dynamic linking dl...() calls that the - Service Configurator uses to dynamically link services at run - time. As a result, all the examples and apps that use a svc.conf - file (for dynamically configuring service objects) do not work, - however, most of these apps can be built/run statically. Also, - the Svc_Conf_l.cpp and Svc_Conf_y.cpp files are generated using - flex and yacc on a ascii (not ebcdic) machine and as a result - they don't work very well with ebcdic svc.conf files. We should - be able to regenerate these files on MVS but MVS doesn't have - flex. This is something that needs to be done.<P> - - Some of the tests do not execute properly. This is a minority - and over time the goal is to get to 100%.<P> - - The make scheme for some of the apps still doesn't work - perfectly on MVS. This is mainly due to the way shared - libraries are handled on MVS. See <A HREF="#mvs">additional - build tips for MVS</A> for more on this.<P> - - <li><strong>QNX Neutrino</strong><p> - - ACE has been ported to <a - href="http://www.qnx.com/products/os/neutrino.html">QNX Neutrino - 2.0</a>. We cross-compile for Neutrino on a QNX4 host using g++ - 2.8.1, using the <a - href="ace/config-qnx-neutrino.h">ace/config-qnx-neutrino.h</a> - and <a - href="include/makeinclude/platform_qnx_neutrino.GNU">include/makeinclude/platform_qnx_neutrino.GNU</a> - configuration files. Many of the ACE tests succeed, though some - fail. As the porting effort progresses, we hope to eliminate - these failures. If you know of fixes, please send them to - us.<p> - - <li><strong>PharLap TNT Embedded ToolSuite (ETS)</strong><p> - - ACE has been ported to <a - href="http://www.pharlap.com">PharLap's</a> TNT Embedded - ToolSuite (ETS) version 9.1. The port is being tested with - Microsoft Visual C++ 6.<p> To build for PharLap, use the - ace/config-pharlap.h configuration file, and the instructions - for building on Win32. Building the ACE library is the same as - for regular Win32 platforms, except you choose one of the PharLap - ETS configurations to build within Visual C++. Only static - library configurations are available for PharLap at this time. - For an example of how to build - binaries, see the tests directory. The tests_pharlap_msvc.lnk - file is a LinkLoc commands file that the ACE tests are built - with. It is likely that local sites may need to adjust this file - for their target environment. <p> If you have any fixes or - suggestions for improving this port, please contact <a - href="mailto:shuston@riverace.com">Steve Huston</a>. -</UL> - - -<HR> -<H4><A NAME="g++">Compiling ACE with GNU g++</A></H4> - -If you use the GNU GCC g++ compiler please note the following: - -<UL> - <li>If you have problems building shared libraries with egcs 1.1 or 1.1.1 - on SunOS 2.5 or 2.5.1 that look like this: - <pre> - /usr/ccs/lib/libgen.a(reg_compile.o): In function `_get_vars_storage': - reg_compile.o(.text+0x30): relocation truncated to fit: R_SPARC_GOT13 free - </pre> - the suggested workaround is to comment out the <code>ACE_HAS_REGEX</code> - <code>#define</code> in <code>ace/config-sunos5.5.h</code>. - Or better, create an <code>ace/config.h</code> that looks like: - <pre> - #ifndef ACE_CONFIG_H - // ACE_CONFIG_H is defined by the following #included header. - - #include "ace/config-sunos5.5.h" - - #undef ACE_HAS_REGEX - - #endif /* ACE_CONFIG_H */ - </pre> - We don't know what causes the link problem, though the - workaround solves it.<p> - - <li>With g++ 2.8.0, an internal compiler error is raised when - trying to compile ACE_Map_Manager instantiations. One workaround - is to disable optimization. The easiest way to do that is: - - <pre><code>% make optimize=0</code></pre> - - Or, you can edit your include/makeinclude/platform_sunos5_g++.GNU, - and comment out the <code>OCFLAGS</code> line.<P> - - <li>ACE/TAO don't seem to build well with g++ 2.8.1. We routinely - use egcs 1.1.1 (on Solaris) and 1.1.2, and recommend those versions.<p> - - <LI>Earlier (prior to 2.7.2) versions of g++ may not compile - certain parts of ACE correctly due to compiler bugs. Please - upgrade to g++ 2.7.2 or greater.<P> - - <LI>Make sure to update your gcc <code>config.status</code> - file. This file is produced when installing gcc; it specifies - where to install the binary files that gcc uses. For example, - it specifies whether to use Solaris's <code>/usr/ccs/bin</code> - binary utils or GNU binary utils. The - <code>config.status</code> file is an output of the gcc - <code>configure</code> script; it is preferable to use the - <code>--prefix</code> option to <code>configure</code> instead - of hacking its output.<P> - - <LI>If you are getting weird link errors when building libACE - on Solaris you are probably using the GNU linker. Try using the - Sun linker (/usr/ccs/bin/ld) instead. Note that gcc first looks - for the GNU linker if it is installed along with gcc. The only - way to not use the GNU linker is to delete it from the - installation or to build your own compiler with no linker. Be - aware that you still need the libraries and includes of gcc.<P> - - NOTE: if you do use the GNU linker, you might need to change - the <code>-G</code> flag to <code>-shared</code> in - the <code>SOFLAGS</code> definition in your - <code>include/makeinclude/platform_macros.GNU</code>.<p> - - <LI>Don't get too confused about contradictory statements in - the gcc documentation. It was written by different - people...<P> - - <LI>Make sure that the linker invoked by gcc produces code - that initializes static objects. Please see gcc's - documentation for using <CODE>collect2</CODE>.<P> - - <LI>By default, gcc (thru version 2.7.2, at least) uses - implicit template instantiation. Besides wasting space, this - breaks the use of ACE_Singleton: instead of one singleton - instance, there could be one instance per object (.o) file that - "sees" the template. Therefore, we have overridden this default - in ACE by enabling the -fno-implicit-templates option to CCFLAGS - in all include/makeinclude/platform_*.GNU files that set CXX to - g++.<P> - - <LI>The disadvantage of this approach is that you must - add template specializations for all templates that your - application uses to your own code. (The ACE libraries are - self-contained: you don't need to add the templates that they - use internally.) Examples of template specializations occur in - quite a few ACE .cpp files; see the end of <A - HREF="apps/Gateway/Gateway/Connection_Handler.cpp">apps/Gateway/Gateway/Connection_Handler.cpp</A> - for one example. An easy way to figure out what template - instantiations are need is to try to build your executable and - pipe the output through c++filt. The linker will report the - missing instantiations as undefined symbols. Iteration may be - necessary, if the template instantiations themselves reference - other templates.<P> - - <LI>Alternatively, you could use the <A NAME="repo">-frepo</A> -option available with - recent egcs versions (2.90 and later, I think) instead of - -fno-implicit-templates. (Patches for earlier g++ versions - might be available from - <a href="ftp://ftp.cygnus.com/pub/g++/">Cygnus</a>.) - ACE readily supports this option for - application code: to enable it just add <code>repo=1</code> to - your <code>make</code> invocation, or to your - <code>include/makeinclude/platform_macros.GNU</code>.<p> - - The size of the ACE library is typically reduced by about - 25 percent with repo=1, compared to the default with - -fno-implicit-templates. This savings results from not - instantiating unused classes, and from not instantiating - unused member functions of those template classes which are - instantiated.<p> - - However, repo=1 requires care if your application creates libraries, - in order to avoid multiple instantiations. We avoid the problem - in ACE (and TAO) by including all of the ACE object files into - other ACE (and TAO) libraries. Please see the g++ FAQ and gcc - manual for more information on the -frepo option.<p> - - Furthermore, it appears that g++ may have problems instantiating - all templates properly with -frepo. We have worked around these - problems (by using explicit instantiations even with ACE_HAS_GNU_REPO) - with egcs 1.1.2. A quick try with g++ 2.95 showed more problems, - so we don't support repo=1 with that g++ version, yet.<p> - - <li>The implementation of templates for g++ version 2.8 - eliminates the restriction against static data members in - template classes.<p> - - <li>A final alternative is to - remove the <code>-fno-implicit-templates</code> option from the - CCFLAGS macro in your include/makeinclude/platform_macros.GNU, - and thereby use the default g++ implicit template - instantiation.<P> - - <LI>Thanks to Thilo Kielmann <<A - HREF="mailto:kielmann@informatik.uni-siegen.de">kielmann@informatik.uni-siegen.de</A>> - for reporting the problem with ACE_Singleton on g++, and for - helping to find and implement these solutions.<P> - - <LI>On VxWorks only, g++ (thru version 2.7.2, distributed - with Tornado 1.0.1/VxWorks 5.3.1), for x86 targets, - -fno-implicit-templates is broken. In addition, -O2 - is not supported on some targets.<P> -</UL> - - -<P><HR> -<H4><A NAME="egcs">Compiling ACE with egcs</A></H4> -<ul> - <li>ACE transparently supports egcs, for the most part. Please see - <a href="#g++">Compiling ACE with g++</a> in this document. And, - please use the appropriate g++ config and platform files for the OS on - which you will use egcs.<p> - - <li><strong><blink><font color="#ff0000">WARNING:</font></blink></strong> - The default behavior of the ACE Makefiles is to add - <code>-fno-exceptions</code> to egcs (and g++ starting with - version 2.8.0) invocations. This disables exception handling - support. On Solaris/sparc and Linux/alpha, it results in a 25 - percent reduction in the size of libACE.so. To enable exception - handling, add <code>exceptions=1</code> to your - <code>make</code> command line invocation, or to your - <code>$ACE_ROOT/include/makeinclude/platform_macros.GNU</code>.<p> - - <li>egcs may have trouble linking some executables, such as the ACE - IOStream_Test, if its static libraries are used. Though - <a href="mailto:trose@bridgewatersys.com">Tim Rose</a> reports - that egcs 1.1.1 static libraries work just fine on Solaris 2.6 - with patches: 105181-12, 105568-13, 105210-19, 105591-05, 105395-04, - and 105490-07.<p> - - If you need or want to use egcs' shared libraries, build it - with the <code>--enable-shared</code> egcs config option. The - <code>--enable-shared</code> option is <strong>not</strong> an - egcs run-time option. Build egcs in a way similar to the - following example: - <pre><code> - $ ./configure --enable-shared - $ make bootstrap - </code></pre> - Be sure to set your <code>LD_LIBRARY_PATH</code> environment - variable, if necessary, to pick up those shared libraries.<p> - - <li>On DEC Alpha, egcs through version 1.03a, at least, may fail - to build ACE if debugging (-g) is enabled. The fix is to - edit the egcs gcc/mips-file.c file, at line 976, and change - <code>PAGE_SIZE</code> to 8192. Then rebuild ACE. Thanks to - <a href="mailto:gpai@voicetek.com">Ganesh Pai</a> for this - information.<p> - - <li>Sun OS 5.6 using egcs1.1.2/egcs 2.95 with - ld:Software Generation Utilities - Solaris/ELF (3.0) - as: WorkShop Compilers 4.X dev 18 Sep 1996<p> - - You could come across weird external symbol linker errors. - - Example: - - <pre> - -I/opt/ace/SunOS-1.0 -DACE_HAS_EXCEPTIONS -o Cached_Accept_Conn_Test - .obj/Cached_Accept_Conn_Test.o -L/opt/ace/SunOS-1.0/ace -L./ -lACE - -lsocket -ldl -lgen -lnsl -lposix4 -lthread - ld: warning: relocation error: R_SPARC_32: file - .obj/Cached_Accept_Conn_Test.o: symbol - __t21ACE_Cache_Map_Manager7Zt30ACE_Refcounted_Hash_Recyclable1Z13 - ACE_INET_AddrZP18Client_Svc_HandlerZt23ACE_Hash_Map_Manager_Ex5Zt - 30ACE_Refcounted_Hash_Recyclable1Z13ACE_INET_AddrZt8ACE_Pair2ZP18 - Client_Svc_HandlerZUiZt8ACE_Hash1Zt30...</pre> - - external symbolic relocation against non-allocatable section .stab; - cannot be processed at runtime: relocation ignored<P> - - Solution:<P> - - Install the "binutils" package from GNU (www.gnu.org); specifically, - "as" and "ld".<P> - - Conclusion:<P> - - Perfect build stats:<P> - - OS: - Kernel version: SunOS 5.6 Generic 105181-03 December 1999.<P> - - compiler: - gcc version egcs-2.91.66 19990314 (egcs-1.1.2 release)<P> - - loader: - GNU ld version 2.9.1 (with BFD 2.9.1) - Supported emulations: - elf32_sparc<P> - - assembler: - GNU assembler version 2.9.1 (sparc-sun-solaris2.6), using - BFD version 2.9.1<P> - - Thanks to <a href="mailto:johng@keck.hawii.edu">John Gathright</a> for providing this - information.<P> - - <li>Compiling using the <code>-fsquangle</code> option helps to shorten long - symbol names and is a boon to linkers and assemblers which cant - grok long names. - - Thanks to <a href="mailto:ssweeney@sanders.com">Skye Sweeney</a> for trying it - out and <a href="mailto:othman@cs.wustl.edu">Ossama Othman</a> for discovering the - option with egcs.<p> - - Heres a note on how to go about this (contributed by Skye - Sweeney):<p> - - 1) -fsquangle the name is a combination of squash and mangle!<p> - - 2) -fsquangle compresses the mangled names.<p> - - 3) All libraries must be compiles with the option. You cannot simply - compile modules that have large names with it. This includes system - libraries and vendor libraries like RogueWave.<p> - - 4) The "simple" solution is not to add the option to each makefile, - but rather recompile the compiler to have the option on by default. - This is done by editing the file `gcc/cp/decl2.c', setting - `flag_do_squangling = 1', then rebuilding the compiler and - libraries.<p> - - 5) After many false starts and linking snafus, I can recompile my - ACE/TAO/RogueWave/Lex/Yacc 100 Meg application.<p> - -</ul> - - -<P><HR> -<H3><A NAME="aceinstall">Building and Installing ACE</A></H3> - -The following explains how to build ACE on <A HREF="#unix">UNIX</A> -and <A HREF="#win32">Win32</A>. - -<h4>General Rules</h4> -<UL> - <li><p>Many features in ACE can be modified by defining some macros in - <code>$ACE_ROOT/ace/config.h</code>. These macros should - <em><b>always</b></em> appear <em><b>before</b></em> including - your platform specific config file.</p> - <li><p>However, if you want to undefine/redefine macros defined in the - platform specific config file, these <code>#undef</code> should - come <em><b>after</b></em> the config file.</p> - <LI> If you're planning to build ACE on multiple platforms, you may - want to consider <A HREF="#cloning">cloning the source tree</A> - before you start. <P> -</UL> - -<hr align=left width="50%"> -<H4><A NAME="unix">Building and Installing ACE on UNIX</A></H4> - -Building and installing ACE on UNIX is relatively simple (the <A -HREF="#win32">process</A> for Win32 is different). Here's what you -need to do:<P> - -<OL> - <LI>Install GNU make 3.7 or greater on your system (available via - anonymous ftp from prep.ai.mit.edu in the pub/gnu directory). - You <EM>must</EM> use GNU make or ACE won't compile.<P> - - <LI>Add an environment variable called ACE_ROOT that contains the - name of the root of the directory where you keep the ACE wrapper - source tree. The ACE recursive Makefile scheme needs this information. - There are several ways to set the ACE_ROOT variable. For - instance, in my .login file I have the following entry:<P> - - <pre><code> - % setenv ACE_ROOT /home/cs/faculty/schmidt/ACE_wrappers - </code></pre><P> - - However, if you're building a number of versions of ACE, e.g., for - different OS platforms or for different releases of ACE, you might use - the following approach: - - <pre><code> - % setenv ACE_ROOT $cwd - </code></pre> - - <LI>Edit the $ACE_ROOT/ace/OS.h file to update things like default - hostname and port numbers you'd like the programs in the - $ACE_ROOT/{apps,tests} directories to use by default. Note, - however that you can normally skip this step because the - defaults are typically fine for most systems. <P> - - <LI>Create a <code>$ACE_ROOT/ace/config.h</code> file that includes - the appropriate platform/compiler-specific header configurations - (such as <code>config-sunos5-sunc++-4.x.h</code>). This file - contains the #defines that are used throughout ACE to indicate - which features your system supports (see the - <code>$ACE_ROOT/ace/OS.h</code> file for many examples of how - the ACE build configuration is affected by these macro - settings). Make sure you settings are placed - <strong>before</strong> the inclusion of the platform-specific - header file.<P> - - There are config files for most versions of UNIX. If there - isn't a version of this file that matches your - platform/compiler, you'll need to make one. Please send me - email if you get it working so I can add it to the master ACE - release.<P> - - <LI>Set the $ACE_ROOT/include/makeinclude/platform_macros.GNU file - to point to the appropriate platform/compiler-specific Makefile - configurations, e.g., platform_sunos5_sunc++.GNU. This file - contains the compiler and Makefile directives that are - platform/compiler-specific<P> - - <LI>Note that because ACE builds shared libraries, you'll need to set - LD_LIBRARY_PATH to whereever you put the binary version of the - ACE library. For example, you probably want to do something - like the following<P> - - <pre><code> - % setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$LD_LIBRARY_PATH - </code></pre><P> - - <LI>When all this is done, hopefully all you'll need to do is type:<P> - - <pre><code> - % make - </code></pre><P> - - at the root of the ACE source tree. This will build the ACE - library, tests, the examples, and the sample applications. - Building the entire ACE release can take a long time and consume - lots of disk space, however. Therefore, you might consider - cd'ing into the <A HREF="ace">$ACE_ROOT/ace/</a> directory and - running <CODE>make</CODE> there to build just the ACE library. - As a sanity check, you might also want to build and run the - automated <A HREF="tests/README">``one-button'' tests</A> in <A - HREF="tests/">$ACE_ROOT/tests/</a>. Finally, if you're also - planning on building <A - HREF="http://www.cs.wustl.edu/~schmidt/TAO.html">TAO</A>, you - should build the <A - HREF="http://www.cs.wustl.edu/~schmidt/gperf.ps.gz">gperf</A> - perfect hash function generator application in <A - HREF="apps/gperf">$ACE_ROOT/apps/gperf/</A>.<P> - - <LI>If you need to regenerate the Svc_Conf_y.cpp file, you'll need to - get <A HREF="http://www.cs.wustl.edu/~schmidt/byacc.tar.gz">Berkeley - YACC</A>. However, you should rarely, if ever, need to do this.<P> - -</OL> - - -<P><hr align=left width="50%"><P> -<H4><A NAME="win32">Building and Installing ACE on Win32</A></H4> - -First, if you are upgrading from an older release, clean up everything -and rebuild from scratch to ensure that everything is rebuilt -correctly. You might have to manually go through the ACE directories -and delete all *.obj, *.dll, *.lib, *.ilk, *.pdb, *.idb, *.ncb, *.opt, -and *.exp files in order to start over from scratch (the Clean command -in MSVC may not do this). <P> - -ACE contains project files for Microsoft Visual C++ 5.0 or later -(*.dsw), Borland C++ 5.x (ace.ide), IBM's VisualAge C++ compiler -(*.icc). There are also Makefile.bor files to compile ACE, the ACE -one-button tests, and TAO with Borland C++ Builder 4.0. <P> - -The Borland C++ Builder 4.0 port has been done by <A -HREF="mailto:jody@atdesk.com">Jody Hagins</A> and <A -HREF="mailto:chris@kohlhoff.com">Christopher Kohlhoff</A>. By -default, the ACE/TAO libraries built for Borland C++ Builder are -intended for use with generic console or windows applications and they -link against the corresponding C++ runtime library. Applications -created using BCB's RAD environment, such as ChatClient, must link -against the VCL-compatible (ie pascal-compatible) runtime library. To -tell the difference between these libraries the VCL-compatible ones -have a 'p' in the suffix (i.e., 'p' for pascal). To build VCL -compatible libraries try -<pre><code> -make -f Makefile.bor -DPASCAL -</code></pre> - -Please see <A -HREF="http://www.tenermerx.com/tao_bcb/index.html">http://www.tenermerx.com/tao_bcb/index.html</A> -for more information on building ACE+TAO with Borland C++ Builder. <P> - -<EM>Note concerning MSVC 5.0 and Service Pack 3:</EM> There has been -confusion regarding MSVC 5 and its Service Pack 3. Some ACE users -have, in the past, had problems with SP3 that were not present in SP2. -Thanks to the diligent efforts of <A -HREF="mailto:fultonb@pcnet1.ascs.aro.allied.com">Bill Fulton</A>, the -mystery appears to be solved. The key? (Oh, this is a good one...) -It would appear that there are actually multiple versions of SP3 in -existence. The earlier ones have the bug, while later ones have it -fixed. The service pack downloadable from Microsoft's web site as of -June 16, 1998 works fine. The CD containing SP3, if it has part -number X03-50158 on the disc (the part number on the jacket is -probably different), also works fine. <P> - -So, if you are experiencing problems with SP3, get a newer one - it'll -probably work. Sheesh...<p> - -We no longer actively support MSVC 4.x. ACE might work with the -compiler but not without some work.<p> - -Note, however, that regardless of the version of SP3, there are some -STL bugs in SP3 which you should get corrected. Please see <A -HREF="http://www.dinkumware.com/vc_fixes.html">http://www.dinkumware.com/vc_fixes.html</A> -for details. Thank you to <A HREF="mailto:ben@jetpen.com">Ben Eng</A> -for the pointer to the STL fixes. - -<OL> - <LI>Uncompress the ACE distribution into a directory, where it will create a - ACE_wrappers directory containing the distribution. The ACE_wrappers - directory will be referred to as ACE_ROOT in the following steps -- so - ACE_ROOT\ace would be C:\ACE_wrappers\ace if you uncompressed into the - root directory.<BR> - <BR> - <LI>Create a file called <code>config.h</code> in the ACE_ROOT\ace - directory that contains: <BR> - <BR> - <CODE>#include "ace/config-win32.h"</CODE><BR> - <BR> - <LI>Now load up the project file for ACE (ACE_ROOT\ace\ACE_Library.mdp or - ACE_ROOT\ace\ace.dsw). <BR><BR> - <LI>Each project will contain 8 different configurations. These - are a mixture of Debug/Release, Unicode/non-Unicode, and - Static/Dynamic library versions for both i386 and Alpha machines. - Make sure you are building the one you'll use. All these - different configurations are provided for your convenience. You - can either adopt the scheme to build your applications with - different configurations, or use <code>ace/config.h</code> to - tweak with the default settings on NT. - <STRONG>Note:</STRONG> If you - use the dynamic libraries, make sure you include ACE_ROOT\bin - in your PATH whenever you run programs that use ACE.<BR><BR> - <LI>If you are building for Windows NT then you can start building - now. If you are building on Windows 95 or Windows 98, then you - should add the line <BR> - <BR> - <CODE>#define ACE_HAS_WINNT4 0</CODE><BR> - <BR> - before the #include statement in ACE_ROOT\ace\config.h and it - will turn off Windows NT 4 specific code.<BR> - <BR> - <li>If you want to use the standard C++ headers (iostream, cstdio, ... - as defined by the C++ Standard Draft 2) that comes with MSVC 5, - then add the line <BR> - <BR> - <CODE>#define ACE_HAS_STANDARD_CPP_LIBRARY 1</CODE><BR> - <BR> - before the #include statement in ACE_ROOT\ace\config.h.<BR> - <br> - <li>To use ACE with MFC libraries, also add the following to - your <code>config.h</code> file. Notice that if you want to - spawn a new thread with CWinThread, make sure you spawn the - thread with THR_USE_AFX flag set.<br> - <br> - <code>#define ACE_HAS_MFC 1</code><br> - <br> - By default, all ACE examples use DLL version of run-time libraries - regardless you are building DLL or static version of ACE. You - can still choose to link ACE statically or dynamically - regardless of run-time libraries. The reason of choosing to - link run-time library dynamically is almost every NT box has - these library installed and to save disk space. If - you prefer to link MFC as a static library into ACE, you can do - this by defining <code>ACE_USES_STATIC_MFC</code> in your - <code>config.h</code> file. If you insist on linking everything - statically, you'll have to modify the project file yourself.<p> - <li>Static version of ACE libraries are build with the following macros defined:<br> - <br> - <code>ACE_HAS_DLL=0</code><br> - <code>ACE_NO_INLINE</code><br> - <br> - You should also have them defined in you application projects if you - want to use the default static ACE libraries with them.<p> - - <li>If you are building for Windows CE, you need to add the line <BR> - <br> - <code>#define ACE_HAS_WINCE</code> - <br> - before including <ace/config-win32.h>. Notice that CE uses a - different set of dsw/dsp files.<br> <br> - - <li>The default project files which build ACE library have various - configurations to build dynamic/static, with or without Unicode - support. Although we recommend using the dynamic library, if, - for some reasons, you would rather work with static library, - you'll need to add the line <BR> - <BR> - <CODE>#define ACE_HAS_DLL 0</CODE><BR> - <BR> - before the #include statement in ACE_ROOT\ace\config.h. - Optionally but highly recommended, you can also add the line <BR> - <BR> - <CODE>#define ACE_NO_INLINE</CODE><BR> - <BR> - before the #include statement in ACE_ROOT\ace\config.h to disable - inline function and reduce the size of static libraries (and your - executables.) Notice that you need to use DLL version of - run-time libraries even you are using ACE as a static library. - That's the default behavior.<BR><BR> - - <li>ACE DLL and LIB naming scheme:<br> - <br> - We use the following rules to name the DLL and LIB files in ACE - when using MSVC.<br> - <br> - "Library/DLL name" + (Is static library ? "s" : "") + (Support Unicode ? "u" : "") + (Is Debugging enable ? "d" : "") + {".dll"|".lib"}<br> - <br> - - <li><a href="http://www.torus-software.com/">Barry - Hoggard</a> maintains a <a - href="http://www.torus-software.com/corba/">CORBA Page</a> - which contains very helpful information on setting MSVC project - settings. You'll need to filter out stuff related to TAO if you - only use ACE.<br><br> -</Ol> - -<B>ACE TESTS</B><P> - -The tests are located in ACE_ROOT\tests. There are two corresponding -project files in that directory also (tests.mdp and tests.dsp).<P> - -Once you build all the tests (Batch Build works well for this), you -can run the batch file <a -href="tests/run_tests.bat"><code>run_tests.bat</code></a> in the -<code>tests</code> directory to try all the tests.<p> - -<B> BUILDING ACE ON A WIN32 MACHINE THAT LACKS A NETWORK CARD </B><P> - -You may want to run ACE on a non-networked machine. To do so, you must -install TCP/IP and configure it to ignore the absence of a network -card. This is one method:<P> - -<OL> - <LI>Run Control Panel - <LI>Choose Network from Control Panel - <LI>Add Adapter: MS Loopback Adapter - <LI>Configure MS Loopback Adapter with 802.3 (default) - <LI>Add Protocol: TCP/IP Protocol - <LI>Configure TCP/IP Protocol with a valid IP address and subnet mask. - Leave everything else at the default settings. - <LI>Add Service: Workstation - <LI>Exit and Restart System - <LI>Run Control Panel again - <LI>Choose Services from Control Panel - <LI>The following services are not necessary and may - be set to Disabled Startup: <BR> - Alerter<BR> - Computer Browser<BR> - Net logon<BR> - Messanger<BR> - <LI>Choose Network from Control Panel - <LI>Confirm the following setup. This is all you need to run ACE:<BR> - Installed Software:<BR> - Computer Browser<BR> - MS Loopback Adapter Driver<BR> - TCP/IP Protocol<BR> - Workstation<BR> - Installed Adapter Cards:<BR> - MS Loopback Adapter<P> -</OL> - -<B>NT ALPHA CONFIGURATIONS</B> - -<P>Many project files already contain Alpha NT configurations, but others do -not (requiring them to be added). Also, since most of the development happens -on x86, problems building ACE on Alpha NT can often be fixed by recreating the -configurations from the x86 versions.</P> - -<P>Here are the steps to add an Alpha Configuration.</P> - -<OL> - <LI>Load the project on the Alpha machine. - <LI>Go to the Build menu and then Configurations. - <LI>Select the project that you want to convert. - <LI>Click on Add. - <LI>Select the x86 configuration to "Copy settings from" - (either Debug or Release versions). - <LI>Prepend "Alpha " to the beginning of the name under - "Configuration". - <LI>Click OK. - <LI>Close the "Configurations" window. - <LI>Now go to the Project settings. - <LI>For the General Settings, change the output directories to standard ACE - output directores. Intermediate Directories are "Debug" and - "Release" in most cases. The Output Directories are blank, - except for Release versions of executables, in which it is also - "Release". - <LI>For the C/C++ Settings, make sure that the Code Generation's runtime - library is set to "Multithreaded DLL" or "Debug Multithreaded - DLL". -</OL> - -<P><B>Note:</B> MSVC 6 has a bug where if a .dsp is converted from version 5 to 6 on -x86, the Alpha configuration will be partially corrupted. If this occurs, the -easiest way to fix it is as above, recreate it.</P> - - -<P><hr align=left width="50%"><P> -<H4><A NAME="vxworks">Building and Installing ACE on VxWorks</A></H4> -For the most part, you should be able to follow the instructions above -to build ACE and applications that use it. Start with the -<a href="#unix">Unix instructions</a> above to build ACE and the -applications that use it. Please see below for more information on -<a href="#VxWorks/NT">building ACE on NT hosts for VxWorks targets</a>.<P> - -A few notes on VxWorks builds (thanks to -<a href="mailto:Paul_von_Behren@stortek.com">Paul von Behren</a> -for these notes):<p> -<UL> - <LI>VxWorks builds are done with a cross compiler, i.e., the compiles - are done on a workstation creating object modules which are - downloaded and loaded into the VxWorks target system.<p> - <LI>C++ object modules must be post-processed by a VxWorks - utility called ``munch.'' ACE includes a perl script called - <A - HREF="bin/ace_ld">$ACE_ROOT/bin/ace_ld</A>, - which is called from the Makefiles, replacing - the traditional <code>ld</code> step. You must have perl installed - to use <code>ace_ld</code>. If perl is not on your path, you'll - have to set <code>PERL_PATH</code> to the full path (including - perl.exe), either in your - <code>$(ACE_ROOT)/include/makeinclude/platform_macros.GNU</code> - or in your environment.<P> - <LI>Wind River provides GCC/G++ cross-compilers for the - supported target platforms. The executables are named cc<target> - and g++<target>; for example, ccppc and g++cpp for PowerPC - targets.<p> -</UL> - -You'll have to let ACE know the target type at compile time. There -are several ways to do this; please see the -<code>$ACE_ROOT/include/makeinclude/platform_vxworks5.x_g++.GNU</code> -platform file for detailed information.<P> - -The VxWorks platform_vxworks*.GNU files are set up so that shared -libraries are not built on VxWorks, by default. Only static -libraries, with .a extension, are built. Therefore, it's not -necessary to set the LD_LIBRARY_PATH environment variable on your host -system when building for VxWorks targets. Please note, however, if -you use TAO on VxWorks that you will need to set your LD_LIBRARY_PATH -to find the TAO IDL compiler libraries (installed in the ace -directory) on the host.<P> - -With g++, $ACE_ROOT/bin/ace_ld is used to munch object files and -libraries to set up calls to static constructors and destructors. -bin/ace_ld requires perl on the host platform.<P> - -These non-default VxWorks kernel configuration <code>#defines</code> -are required with ACE:<P> - -<pre> -#define INCLUDE_CPLUS /* include C++ support */ -#define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */ -#define INCLUDE_POSIX_ALL /* include all available POSIX functions */ -</pre> - -For completeness, here are the non-default <code>#defines</code> that -we used for VxWorks 5.3.1/g++ 2.7.2: - -<pre> -#define INCLUDE_CPLUS /* include C++ support */ -#define INCLUDE_CPLUS_IOSTREAMS /* include iostreams classes */ -#define INCLUDE_CONFIGURATION_5_2 /* pre-tornado tools */ -#define INCLUDE_DEBUG /* pre-tornado debugging */ -#define INCLUDE_LOADER /* object module loading */ -#define INCLUDE_NET_SYM_TBL /* load symbol table from network */ -#define INCLUDE_SYM_TBL_SYNC /* synchronize host and target symbol tables */ -#define INCLUDE_NFS /* nfs package */ -#define INCLUDE_PING /* ping() utility */ -#define INCLUDE_POSIX_ALL /* include all available POSIX functions */ -#define INCLUDE_RDB /* remote debugging package */ -#define INCLUDE_RLOGIN /* remote login */ -#define INCLUDE_RPC /* rpc package */ -#define INCLUDE_SECURITY /* shell security for network access */ -#define INCLUDE_SHELL /* interactive c-expression interpreter */ -#define INCLUDE_SHOW_ROUTINES /* show routines for system facilities*/ -#define INCLUDE_SPY /* spyLib for task monitoring */ -#define INCLUDE_STARTUP_SCRIPT /* execute start-up script */ -#define INCLUDE_STAT_SYM_TBL /* create user-readable error status */ -#define INCLUDE_SYM_TBL /* symbol table package */ -#define INCLUDE_UNLOADER /* object module unloading */ -#define INCLUDE_WINDVIEW /* WindView command server */ -</pre> - -Also, automatic construction/destruction of static objects -should be enabled.<p> - -If you use TAO, it's also a good idea to increase the -<code>NUM_FILES</code> parameter from its default of 50 to, -say, 1000.<p> - -Please note that those VxWorks kernel configuration parameters -are set in the VxWorks configAll.h file. You must rebuild your -VxWorks kernel after modifying that file.<p> - -If you're first getting started with ACE and/or VxWorks, I recommend -just building the ACE library and tests first. (Some of the ACE -examples, in System_V_IPC, don't build on VxWorks yet.) Then try -running the tests. Please see $ACE_ROOT/tests/README for the latest -status of the ACE tests on VxWorks.<P> - -Please note that the <code>main</code> entry point is renamed to -<code>ace_main</code> (configurable via ACE_MAIN) on VxWorks with g++, -to comply with its restriction against using <code>main</code>. -In addition, ACE_HAS_NONSTATIC_OBJECT_MANAGER is enabled by default -to cleanly support construction and destruction of static objects. -Please see the <A HREF="#Non-static Object Manager">Non-static -ACE_Object_Manager</A> discussion for the important implication -of this feature.<p> - -ACE threads (VxWorks tasks) can be named, for example, by supplying a -non-null argument to the Thread_Manager spawn routines. However, -names beginning with <code>"==ace_t=="</code> are forbidden because -that prefix is used internally by ACE.<p> - -You can spawn a new task to run <code>ace_main</code>, using either -VxWorks <code>sp</code>, or ACE'S <A NAME="spa"><code>spa</code></A>. -<code>spa</code> can be used from the VxWorks shell to pass arguments -to <code>ace_main</code>. Its usage is: - -<pre><code> -spa ace_main, "arg1" [, ...] -</code></pre> - -All arguments must be quoted, even numbers.<p> - -The ACE <a href="tests/">tests</a> write their output files in a -directory named <code>log/</code>, below the current -(<code>tests</code>) directory. If you don't have NFS included in -your VxWorks kernel, you can use these steps, provided by -<a href="mailto:clarence_m_weaver@md.northgrum.com">Clarence M. Weaver</a>, -to run the tests and capture their output:<p> -<ol> - <li>What I did was create a log directory on the boot NT host of my vxworks - target.<p> - <li>I copied all the test applications and the run_tests.vxworks script to - the parent of the log directory.<p> - <li>Using the target shell not the host shell, I "cd" to the directory - containing the script and test programs.<p> - <li>Invoked the script < run_tests.vxworks from this target shell.<p> -</ol> - -<a href="mailto:Kirk.Davies@pobox.com">Kirk Davies</a> provided this -approach for running the ACE tests on Tornado II: - -<ul> - <li>Under Tornado II, I set up the Target Server File System (TSFS), and - the test logs get written to the log subdirectory under that.<p> - <li>You have to set an environment variable before running the tests: -<pre> -putenv("ACE_TEST_DIR=/tgtsvr") -</pre><p> -</ul> - -<h5><a name="VxWorks/SharedLibs">Building Shared Libraries for VxWorks</a>.</h5> - -ACE supports shared libraries for VxWorks, but only with the g++ -compiler. To build shared libraries instead of the default static -libraries, added <code>shared_libs=1</code> (<strong>not</strong> -<code>shared_libs_only=1</code>) to either your -<code>ACE_wrappers/include/makeinclude/platform_macros.GNU</code> or -your <code>make</code> invocation. Then, be sure to load the ACE (and -any other) shared library before loading your executable(s).<p> - -A shared library for VxWorks uses the same code as for a static -(non-shared) library. However, calls to static constructors/ -destructors are added. The code in the shared library <strong>must</strong> -be reentrant if you shared it between programs (tasks). The -ACE library meets this requirement.<p> - -Shared libraries reduce build time, executable size, and load -time of the executable. But, you must manually load the shared -library before loading your executable(s) with a command such as: -<pre><code> --> ld < libACE.so -</code></pre> -Shared libraries can be unloaded the same way an executable -(module) is unloaded.<p> - -<strong>NOTE</strong>: Shared libraries on VxWorks aren't the same as -shared libraries on other operating systems. In particular, there is -no support for creating copies of writeable global (static) data in -the shared library. This includes the singleton ACE_Object_Manager -instance pointer. If you share global data between separate programs, -they may not work properly. See the discussion of shared code and -reentrancy in the VxWorks' <em>Programmers Guide</em>.<p> - -Instead of trying to run separate programs onto a VxWorks target, we -recommend creating just one program, and spawning a thread for each -task. The TAO IDL_Cubit test <a -href="TAO/performance-tests/Cubit/TAO/IDL_Cubit/collocation_test.cpp">collocation -test</a> is a good example.<p> - -<h5><a name="VxWorks/LinkToKernel">Linking ACE and/or TAO Libraries into the VxWorks Kernel</a>.</h5> - -It's easy to link your ACE and/or TAO libraries into the VxWorks kernel. -Just build <a href="#VxWorks/SharedLibs">shared versions</a>, but -disable the munch step. The easiest way to do that is to set the -<code>LD</code> make variable to the name of your linker. For -example, to build a libACE.so for PowerPC that can be linked into -the kernel: -<pre> -% cd $ACE_ROOT/ace -% make LD=ldppc shared_libs=1 -</pre> -After building the shared lib, link it into the kernel by setting -the <code>MACH_EXTRA</code> make variable in the kernel configuration -Makefile. Then, build the kernel using <code>make exe</code>.<p> - - -<h5><a name="VxWorks/NT">Building ACE on Tornado/NT hosts for VxWorks targets</a>.</h5> -The following, very useful information was contributed by -<a href="http://people.qualcomm.com/cryan">Chris Ryan</a> -and <a href="mailto:Paul_von_Behren@stortek.com">Paul von Behren</a>. -Please submit corrections, additions, or clarifications to the -the <a href="mailto:ace-users@cs.wustl.edu">ACE mailing list</a>.<p> - -<strong>NOTE:</strong>The make (version 3.74) that is provided with -Tornado II cannot be used to build ACE. Use Cygnus' make (version 3.75) -instead.)<p> - -<strong>NOTE:</strong>Optimization is enabled be default in -<a href=include/makeinclude/platform_vxworks5.x_g++.GNU>platform_vxworks5.x_g++.GNU</a>. However, the compiler that is shipped with Tornado II has -trouble compiling some files with -O2. To disable optimization -for an individual file, just add <code>optimize=0</code> to your -make invocation when compiling that file.<p> - -Using the Cygnus tools, this approach works: -<ul> - <li>You'll build both your NT and VxWorks executables in the same - workspace (directory hierarchy). This works because the NT - compiler and ACE's Makefiles put their output in different - directories.<p> - <li>Set up your - <code>ACE_wrappers/include/makeinclude/platform_macros.GNU</code> - as usual for VxWorks. See - <a href="include/makeinclude/platform_vxworks5.x_g++.GNU">the - g++/VxWorks platform file</a> for more information.<p> - <li>Create an <code>ACE_wrappers/ace/config.h</code> file that looks - something like the following. tao_idl should be built to not support - native exception handling, because that's not available on VxWorks. -<pre> -#if defined (_MSC_VER) || defined (__BORLANDC__) -# include "ace/config-win32.h" -# undef ACE_HAS_EXCEPTIONS -#else -# include "ace/config-vxworks.h" -#endif -</pre><p> - <li>Set your <code>ACE_ROOT</code>, <code>CPP_LOCATION</code>, - <code>WIND_BASE</code>, and <code>WIND_HOST_TYPE</code> environment - variables.<p> - <li>Build for NT, then build for VxWorks.<p> -</ul> - -A few additional Windows Notes, from Paul von Behren:<p> -<ul> - <li>Cygnus has created a Win32 API which is compatible with a - ``generic'' Unix environment. Using this library, they have ported a - large collection of GNU tools to WinNT/95 - including a port of - gcc/g++. See <A href="http://www.cygnus.com/misc/gnu-win32/">http://www.cygnus.com/misc/gnu-win32/</A> - A related link is <a href="ftp://ftp.cygnus.com/pub/gnu-win32/latest/">ftp://ftp.cygnus.com/pub/gnu-win32/latest/</a><p> - <li>To set up the command-prompt build environemnt, run - <code>Tornado\host\x86-win32\bin\TorVars.bat</code>. This is done - implicitly within the Tornado IDE.<p> - <li>To run <code>ace_ld</code>, you still need perl installed - - see <A href="http://www.activestate.com/software/default.htm">http://www.activestate.com/software/default.htm</A> - for Windows perl.<p> - <li>The Tornado IDE will use a standard Makefile for project - builds, but does not have a GUI interface for managing the - Makefile. By default, it will use rules from Makefile in the current - directory and you can configure it to add certain Makefile - targets to the project. If you have <code>ACE_ROOT</code> defined - before starting Tornado, you can specify an ACE Makefile as a Tornado - target and Tornado will then call make from the menu.<p> -</ul> - -And Chris Ryan's instructions for building for VxWorks targets -on Windows NT hosts: - -<ol> - <li>Path setting that seems to be working is:<p> - <pre> - /tornado/host/x86-win32/bin: - /tornado/host/x86-win32/lib/gcc-lib/i386-wrs-vxworks/cygnus-2.7.2-960126: - /tornado/host/x86-win32/i386-wrs-vxworks/bin: - /ace/ace_wrappers/bin: - /gnuwin32/b18/H-i386-cygwin32/bin: - /gnuwin32/b18/tcl/bin: - /WINNT/system32: - /WINNT: - /WINNT/system32/nls/ENGLISH: - /bin - </pre> - - Other environment variables:<p> - <pre> - WIND_BASE=/tornado - SHELL=/bin/sh.exe - TERM=pcbios - TAO_ROOT=/ace/ACE_wrappers.vxworks/TAO - CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.EXE - GCC_EXEC_PREFIX=/tornado/host/x86-win32/lib/gcc-lib/ - WIND_HOST_TYPE=x86-win32 - ACE_ROOT=/ace/ACE_wrappers.vxworks - </pre> - - <li><code>/tornado</code> is the root of the Tornado install - (<code>$WIND_BASE</code>). - - <li><code>/gnuwin32</code> is the root of a Cygnus GNU download and install. - - <li><code>/bin</code> content is:<p> - <pre> - aced.dll - cygwin.dll - perl.exe - rm.exe - sh.exe - true - </pre> - - <code>aced.dll</code> is produced in an ACE NT source tree according to - documented procedure for NT VC++5.0 ACE build. - - <code>cygwin.dll</code> is from the Cygnus GNU software download and install. - - <li>Basically, follow documented procedure for ACE build/install on UNIX - platform. Create a <code>$ACE_ROOT/ace/config.h</code> that looks - like:<p> - <pre> - #include "config-vxworks5.x.h" - </pre> - - And create a - <code>$ACE_ROOT/include/makeinclude/platform_macros.GNU</code> - that looks like:<p> - <pre> - WIND_BASE = /tornado - WIND_HOST_TYPE = x86-win32 - CPU = I80486 - include $(ACE_ROOT)/include/makeinclude/platform_vxworks5.x_g++.GNU - </pre> - - <LI>When using cygnus windows GNUTools on WinNT you have to start - make with "--unix" option, otherwise WinNT shell cmd.exe is responded and - not sh.exe, i.e., - <PRE> - make --unix static_libs=1 - </PRE> -</ol> - -<h5>TAO on NT Tornado host, VxWorks target.</h5> - -<ol> - <li>Build ACE and TAO_IDL in the NT tree as already documented. As - mentioned above, I put <code>aced.dll</code> in <code>/bin</code>. - Be sure to build ACE's gperf on NT, in - <code>ACE_wrappers/apps/gperf/src</code>.<p> - - <li>Build $TAO_ROOT/tao - <pre> - CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe - cd $TAO_ROOT/tao - /gnuwin32/b18/H-i386-cygwin32/bin/make - </pre> - - <li>Build orbsvcs. - <pre> - CPP_LOCATION=/Program Files/DevStudio/VC/bin/CL.exe - cd $TAO_ROOT/orbsvcs/orbsvcs - /gnuwin32/b18/H-i386-cygwin32/bin/make - </pre> - - <li>Build $TAO_ROOT/tests<p> -</ol> - - -<HR> -<H3><A NAME="svcsinstall">Building and Installing ACE Network Services</A></H3> - -The following explains how to build the ACE <A -HREF="http://www.cs.wustl.edu/~schmidt/ACE-netsvcs.html">network services</A> on <A -HREF="#unixsvcs">UNIX</A> and <A HREF="#win32svcs">Win32</A>. - -<P><hr align=left width="50%"><P> -<H4><A NAME="unixsvcs">Building and Installing ACE Network Services on UNIX</A></H4> - -Building and installing ACE Network Services on UNIX is relatively -simple (the <A HREF="#win32svcs">process</A> for Win32 is different). -Here's what you need to do:<P> - -<OL> - - <LI>Build and install ACE on UNIX as described <A - HREF="#unix">earlier</A>. If ACE is built at the root of the ACE - source tree (and ACE has been ported to your platform, of course) the - netsvcs static and shared object libraries should be built - automatically. In addition, the server driver program - (<CODE>main</CODE>) contained in <A - HREF="netsvcs/servers/main.cpp">$ACE_ROOT/netsvcs/servers/main.cpp</A> - should also be compiled and ready to run.<P> - - <LI>Set your LD_LIBRARY_PATH environment variable to where the binary - version of the ACE netsvcs library. For example, you probably - want to do something like the following<P> - - <pre><code> - % setenv LD_LIBRARY_PATH $ACE_ROOT/ace:$LD_LIBRARY_PATH - </code></pre><P> - - <LI>By default, if the shared object library is built, the services - are linked into the <CODE>main</CODE> driver program dynamically. - To specify which services should be linked in and executed, edit the - <A - HREF="netsvcs/servers/svc.conf">$ACE_ROOT/netsvcs/servers/svc.conf</A> - file. During your editing, you should update information (such as the - default service port numbers) that affects the initialization of - services in this file. Refer to the - <A HREF="ACE-papers.html#config">Service Configurator</A> - documentation to learn how the configuration file is parsed and - how the services are dynamically linked and executed. In - addition, refer to the <A - HREF="http://www.cs.wustl.edu/~schmidt/ACE-netsvcs.html">Network - Services</A> documentation to learn more about how to configure - each network service.<P> - - <LI>If you only want to link the services statically, simply remove - or rename the svc.conf file.<P> -</OL> - -<P><hr align=left width="50%"><P> -<H4><A NAME="win32svcs">Building and Installing ACE Network Services on Win32</A></H4> - -Once again, there are supplied project for MSVC 5.0 or later for -the Network Services.<P> - - -<HR><P> -<H3><A NAME="#minimum_build">What Do I Need to Build for TAO?</A></H3> -Toshio Hori <toshi@etl.go.jp> provided these suggestions on building -just what's needed for (a subset of) TAO:<p> - -I usually make: -<pre> - $ACE_ROOT/ace, - $ACE_ROOT/apps/gperf, - $TAO_ROOT/tao, - $TAO_ROOT/TAO_IDL, and - $TAO_ROOT/orbsvcs/orbsvcs -</pre> -and the whole make takes less than an hour on my Solaris 7 for intel, -Pentium-III/550MHz, 256MB memory, 512MB swap machine. (Top secret: I -renice the 'make' process to the highest priority, -20... ;-) - -To save time and space, I set -<pre> - TAO_ORBSVCS = Naming Time Trader ImplRepo -</pre> -in $ACE_ROOT/include/makeinclude/platform_macros.GNU also. See -<a href="TAO/docs/configurations.html#orbsvcs">TAO's orbsvcs -library customization instructions</a> for more information.<p> - - -<HR><P> -<H3><A NAME="resource_requirements">System Resource Requirements</A></H3> -The amount of system resources required to build ACE and TAO varies -greatly. Platform, build options, and components built primarily -influence the required system resources. As a rough guide, the -typical peak memory requirement could be well over 256 Mb (notably, -for TAO's orbsvcs). An <strong>entire</strong> build of ACE and TAO -can use well over 1300 Mb of disk space. It's usually not necessary -to build <strong>all</strong> of ACE and TAO, though.<p> - -Much less disk space is required for just the libraries. For example, -see the <a href="docs/ACE-subsets.html#ACE Library Size Breakdown">ACE -library subset sizes</a>.<p> - -If you run out of memory when building, you might consider trying -some or all of these suggestions:<p> -<ul> - <li>Enable or increase virtual memory. If you're on a <a - href="#Linux">Linux</a> or <a href="#LynxOS">LynxOS</a> platform, - please see the appropriate sections above.<p> - <li>Disable/enable optimization and/or debugging. See the - <a href="#flags">Makefile Flags</a> discussion for information - on how to do that via ACE's Makefiles.<p> - <li>If you're using g++, try removing <code>-pipe</code> from - <code>CFLAGS</code> in your - <code>include/makeinclude/platform_macros.GNU</code> file.<p> - <li>Restrict the components that you build. For ACE and TAO, see the - discussion of <code>ACE_COMPONENTS</code> in the - <a href="docs/ACE-subsets.html">ACE subsets</a> page. For TAO's - orbsvcs, see the discussion of <code>TAO_ORBSVCS</code> in - <a href="TAO/docs/configurations.html#orbsvcs">orbsvcs Library configuration information</a>.<p> - -If disk space is a problem, disabling debugging should greatly -reduce object code, and therefore, library size. This is especially -true with g++.<p> - -Toshio Hori <toshi@etl.go.jp> provided these tips for reducing -disk space usage:<p> - -To save space on a Unix machine, I usually run - 'find . -name \*.dsw -o -name \*.dsp -o -name \*.bor | xargs rm -f' -in $ACE_ROOT at first after I untar the distribution. They are -meaningless in my environment (Files named '*.dsw' and '*.dsp' are -used for MSVC++ and files named '*.bor' are for Borland C++ -Builder.)<p> - -Finally, to save space, may want to run 'make clean' after 'make'. It -removes generated object files and leaves libraries/exectables -intact.<p> -</ul> - - -<HR><P> -<H3><A NAME="advanced">Advanced Topics</A></H3> - -<UL> - <LI><A - HREF="docs/ACE-porting.html">Porting ACE and TAO to a New OS Platform</A> - <LI><A HREF="http://www.cs.wustl.edu/~othman/aceconf">Using GNU's - Autoconf with ACE</A> - <LI><A HREF="#Non-static Object Manager">Non-static ACE_Object_Manager</A> - <LI><A HREF="#cloning">Cloning the Source Tree</A> - <LI><A HREF="#corba">Building CORBA Versions of ACE</A> - <LI><A HREF="#mvs">Additional Build Tips for MVS</A> - <LI><A HREF="#flags">Makefile Flags</A> - <LI><A HREF="http://www.cs.wustl.edu/~levine/CVS.html">Version Control</A> - <LI><A HREF="http://www.cs.wustl.edu/~cleeland/ace/makefile-hints.html">ACE Makefile hints</a> - <LI><A - HREF="http://www.cs.wustl.edu/~schmidt/ACE_wrappers/docs/ACE-SSL.html">ACE SSL effort</a> -</UL> - -<P><hr align=left width="50%"><P> -<H4><A NAME="Non-static Object Manager">Non-static -ACE_Object_Manager</A></H4> The ACE_Object_Manager can be instantiated -as a static object, can be instantiated on the stack of the main -program thread, or can be explicitly instantiated and destroyed by the -application with <code>ACE::init ()</code> and <code>ACE::fini -()</code>. The comments in the <a href="ace/Object_Manager.h">header -file, <code>ace/Object_Manager.h</code></a> provide more detail.<P> - -<strong><blink><font color="#ff0000">NOTE:</font></blink></strong> -Special requirements are imposed on applications if the -ACE_Object_Manager is instantiated, by ACE, on the stack of the main -thread. This behavior is selected by defining -<code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> in -<code>ace/config.h</code>. Again, see the ACE Object_Manager <a -href="ace/Object_Manager.h">header file, -<code>ace/Object_Manager.h</code></a> for more information. One of -these requirements is discussed here, because it is so important. -Please note that <code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> is -defined in the distributed ACE <code>config.h</code> headers for -VxWorks and Win32.<p> - -The important requirement is that the program <strong>must</strong> -declare its <code>main</code> function with two arguments, even if -they're not used, and with <code>int</code> return type: - -<pre><code> -int -main (int, char *[]) -</code></pre> - -If you don't declare <code>main</code> <strong>exactly</strong> that -way, then you'll see a link error about <code>ace_main_i</code> being -undefined.<p> - -Alternatively, this feature can be disabled by commenting out the -#define ACE_HAS_NONSTATIC_OBJECT_MANAGER in the -<code>ace/config.h</code>. But, that will make repeated testing more -difficult on VxWorks. And, you'd either have to call static -constructors and destructors manually or unload/load the program -between runs. On Win32, disabling the feature can possibly lead to -shutdown difficulties.<p> - -<strong><blink><font color="#ff0000">WARNING:</font></blink></strong> -<code>ACE_HAS_NONSTATIC_OBJECT_MANAGER</code> assumes that your -<code>main</code> function is named <code>main</code>. Any violation -of this assumption is at your peril. If you really need to call your -entry point something other than <code>main</code>, you'll need to -construct and destroy the ACE_Object_Manager. The best way to do that -is to call <code>ACE::init ()</code> and <code>ACE::fini ()</code>. -Or, see the <code>#define</code> of <code>main (int, char *[])</code> -in <a href="ace/OS.h"><code>ace/OS.h</code></a> to see how ACE does -that for entry points named <code>main</code>.<p> - -<P><hr align=left width="50%"><P> -<H4><A NAME="cloning">Cloning the Source Tree</A></H4> - -On UNIX platforms, we typically like to support multiple platform -builds using the same ACE source tree. This idiom is supported by ACE -using the $ACE_ROOT/bin/create_ace_build script or -$ACE_ROOT/bin/clone.cpp program. - -To use build and use the clone program, first make sure there's a file -called platform_macros.GNU that contains the correct platform-specific -Makefile configurations in the $ACE_ROOT/include/makeinclude/ -directory, as well as making sure there's a $ACE_ROOT/ace/config.h -file that includes the desired platform/compiler specific -configuration header. Then perform the following steps:<P> - -<pre> -% cd $ACE_ROOT/bin -% make -% mv clone ~/bin -% rehash -</pre><P> - -Then create a ./build subdirectory someplace, e.g., under $ACE_ROOT. -Once this is done, then invoke the top-level Makefile with the -``clone'' target, e.g.:<P> - -<pre> -% cd $ACE_ROOT -% mkdir build-SunOS5 -% cd build-SunOS5 -% make -f ../Makefile clone -% setenv ACE_ROOT $cwd -% make -</pre><P> - -This will establish a complete tree of links. In addition, make sure -you set your LD_LIBRARY_PATH to $ACE_ROOT/ace:$LD_LIBRARY_PATH on SVR4 -UNIX platforms.<P> - -When you do a make in the $ACE_ROOT directory you will be producing -object code that is not stored in the same place as the original -source tree. This way, you can easily build another platform in a -parallel tree structure.<P> - -<B> VERY IMPORTANT! </B><P> - -If you use the ``clone trick'' discussed above, make sure that the -symbolic links are correctly in place before starting the build. In -particular, if you plan to clone the tree, it is preferable to do so -before you start a build procedure on the original tree. This is -because the build procedure create object directories (.obj and -.shobj) and the cloning procedure will clone these directories also. -You would end up with links pointing to object files of another -platform. If you clone the tree after you've done a build on the -original tree, make sure to remove all ".obj", ".shobj" and (any other -files or directories) in all subdirectories before starting the build -on your cloned tree.<P> - -Alternatively, the perl script -<code>ACE_wrappers/bin/create_ace_build</code> can be used to create -build trees. It creates them below <code>ACE_wrappers/build</code>. -It filters out all but the necessary files, so the warning above does -not apply. See the comments at the top of the script itself for usage -information. - -<P><hr align=left width="50%"><P> -<H4><A NAME="corba">Building CORBA Versions of ACE</A></H4> - -Note that if you are compiling with IONA's Orbix implementation of -CORBA or Visigenix's implementation of CORBA, you'll also need to set -ORBIX_ROOT to point to the root of the Orbix source tree and -ORBELINE_ROOT to point to the root of the ORBeline source tree. Since -many platforms don't have these CORBA tools the default for ACE does -*not* incorporate them. Thus, if you are compiling with Orbix or -ORBeline, make sure that you set up -$ACE_ROOT/include/makeinclude/platform_macros.GNU and -$ACE_ROOT/ace/config.h to use the config* and platform* -files that have "-orbix" in them! - - -<P><hr align=left width="50%"><P> -<H4><A NAME="mvs">Additional Build Tips for MVS</A></H4> - -For all intents and purpose, MVS OpenEdition (OE) is another flavor of -UNIX, therefore, the instructions under <A HREF="#aceinstall">Building -and Installing ACE on Unix</A> can be used along with the following -additional tips:<P> - -You can get a copy of GNU make that has been ported to MVS OpenEdition from -the <A HREF="http://www.s390.ibm.com/products/oe/index.html">IBM OpenEdition web site</A>. -ACE's make scheme generates compile commands that have options and -operands interspersed. By default, the c89/cc/c++ compiler expects all options to -precede all operands. To get around this, you must set a special -compiler environment variable (_CXX_CCMODE) to 1 which tells the compiler -to allow options and operands to be interspersed.<P> - -Note that the environment variable LD_LIBRARY_PATH is called LIBPATH -on MVS.<P> - -Shared objects are built a little different on MVS than on -other UNIX implementations. This has been accounted for in the makefiles -that come with ACE When the linker (via the cxx command) builds the -libACE.so file it will also create a file called libACE.x. This is a -side-deck file and it must be included in subsequent link edits with -application code. For more information on this see the C/C++ MVS -Programming Guide. If you want to build your application statically, -i.e., using libACE.a instead of libACE.so, you can set ACELIB to -ACELIB_STATIC in platform_mvs.GNU.<P> - -When the libACE.so file is built (via the MVS pre-linker and binder), you -will get a rc=4 from the pre-linker. This is ok. This is due to some -warnings about unresolved references which should get resolved during the -link step. Note, however, there shouldn't be any unresolved references -from the binder (linkage editor). You can get pre-link and link maps by -uncommenting the PMAP and LMAP lines in the platform_mvs.GNU file.<P> - - -<P><hr align=left width="50%"><P> -<H4><A NAME="flags">Makefile Flags</A></H4> - -GNU make provides many options to customize its operation. See its -documentation for more information. One example is that for multi-cpu -UNIX machines you will be able to build faster if you use:<P> - -<pre><code> -% make -j <em>n</em> -</code></pre><p> - -which allows parallel compilation. The number <i>n</i> should -typically be the number of CPUs. It is likely that builds will be -faster even on single-CPU UNIX machines with <code>make -j -2</code>.<P> - -ACE further supports the following flags. They can be enabled either -on the command line, e.g., "make purify=1", or added to your -platform_macros.GNU. To disable the option, set the flag to null, -e.g., "make debug=". Some flags support setting to 0 disable, e.g., -"make debug=0". debug=1 is enabled in the platform files that are -released with ACE.<P> - -Please note that the effects of a flag may be platform specific. -Also, combinations of certain flags may or may not be allowed on -specific platforms, e.g., debug=1 opt=1 is supported by g++ but -not all other C++ compilers.<P> - -If you use Purify or Quantify: purify or quantify <strong>must</strong> -be on your <code>PATH</code>. By default, ACE puts the Purify/Quantify -caches below <code>/tmp</code>. To override that, set the -<code>PURE_CACHE_BASE_DIR</code> variable, either in your environment -or on the <code>make</code> make command line, to the destination -directory for your instrumented libraries.<p> - -<PRE> -Flag Description ----- ----------- -debug Enable debugging; see DCFLAGS and DCCFLAGS. -exceptions Enable exception handling (not supported by all platforms). -fast Enable -fast option, e.g., with Sun C++. -inline Enable ACE inlining. Some platforms enable inlining by -default, others do not. -optimize Enable optimization; see OCFLAGS and OCCFLAGS. -orbix Enable use of Orbix. -probe Enable ACE_Timeprobes. -profile Enable profiling; see PCFLAGS and PCCFLAGS. -purify Purify all executables. -quantify Quantify all executables. -repo Use GNU template repository (g++ with repo patches and - egcs only). -rtti Enable run-time type identification. On some platforms, - it is enabled by default, so this is ignored. -shared_libs Build shared libraries. Ignored if static_libs_only is set. -static_libs Build shared libraries. Ignored if shared_libs_only is set. -shared_libs_only Only build shared libraries. Ignored if no SHLIBs are -specified by the Makefile, as in performance-tests/Misc. -static_libs_only Only build static libraries. -threads Build with thread support. -xt_reactor Build the XtReactor. - -Usually, users do not need to be concerned with make targets. -Just enter ``make'' on the command line to build. A few notable -targets are listed below. - -Target Description ------- ----------- -show_statics Lists all static objects in object files built for -current directory. Only supported for g++. -show_uninit Lists all uninitialized in object files built for -current directory. Only supported for g++. - -</PRE> -<HR><P> - -Back to the <A HREF="http://www.cs.wustl.edu/~schmidt/ACE.html">ACE</A> -home page. - -<!--#include virtual="/~schmidt/cgi-sig.html" --> -</BODY> -</HTML> |