Release Notes for OCI's Distribution of TAO 1.3a_p3
Copyright 2000-2004 by Object Computing, Inc.

NOTE:   These release notes can be found in the distribution at ACE_wrappers/OCIReleaseNotes.html.

Table of Contents

  1. General Notes
  2. New Features Since TAO 1.2a
  3. Platforms that this release was tested on:
  4. OCI recommended build flags

General Notes

  1. Heritage -- Relationship to DOC Releases

    TAO 1.3a derives from the DOC TAO 1.3.1 beta kit with bugfix-related patches selectively applied to enhance stability. A record of applied patches can be found in OCIChangeLog files installed with the distribution.

  2. Make Project Creator

    All of ACE/TAO was built using MakeProjectCreator (MPC). This tool is included with this distribution and may be used for your own projects as well. MPC will generate GNU make files, Windows project files for both VC++ 6 and 7.1, Borland make files, and others. It can be extended to other make systems as well. MPC documentation is available in the distribution at ACE_wrappers/bin/MakeProjectCreator/README or in the OCI Developer's Guide for TAO 1.3a. This chapter can be viewed from in html or downloaded in pdf.

    Thus, all of the previous make files and project files, except for Visual Age project files (which do not yet have a MPC generator), have been removed and only generated files are present in this distribution.

  3. GNU Make on Unix

    With the exception of Windows operating systems, ACE and TAO were built with GNU Make. While one can use other tools to build applications using ACE & TAO, using GNU Make permits the leveraging of the existing build system distributed with ACE & TAO.

  4. Compiler restrictions

    Version 1.3a of ACE/TAO, being based on DOC TAO 1.3.1, requires that the compiler be able to support namespaces, at least minimially. Any compiler that does not support namespaces cannot be used with this version, for example, Sun's 4.2 compiler and Tornado 2.0.

  5. Explict template instantiation

    It's possible, and maybe even desirable, to use explict template instantiation for any platform. This can not only decrease compile times, but it helps prevent submitting errors in the explicit instantiation sections of source files. Just add "#define ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION" to config.h to enable this feature. A related setting for gcc, suncc, and others can be enabled by adding "templates=explicit" to platform_macros.GNU. This has the same effect as above, but additionally *requires* explicit instantiation. Since all current compilers support implicit templates, there is less need for this setting. However, this setting is still the default for suncc compilers, therefore you should probably add "templates=automatic" to you platform_macros.GNU for suncc. Currently there is an additional side-effect to enabling explict template instantiation, regardless of which method you use to do it. It changes the default setting for TAO_USE_SEQUENCE_TEMPLATES, so that a non-template base class is used for all corba sequences. This means that you'll typically want to also add a "#define TAO_USE_SEQUENCE_TEMPLATES" to your config.h, whenever you add the "#define ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION".


New Features

Many important new features and bug fixes have been introduced in TAO 1.3a. They are described briefly here. These and many other features of TAO 1.3a are detailed in OCI's TAO Developer's Guide, Version 1.3a, available separately.

  1. Features added since TAO 1.2a as part of TAO 1.3.1
    • Persistent State Service (PSS) describes a way of making a service persistent. The fact that PSS is being used by a service is known only to the service (server) and not to the client which makes use of the service. PSS presents persistent information as storage objects stored in storage homes, to quote the specification. The storage homes are the datastores where the persistent data is saved.
    • SSLIOP pluggable protocol ships with 1.3a. This allow users to use an SSL implementation (not shipped with ACE/TAO) as a communication conduit.
    • There is a new Load Balancing Service that implements the current joint load balancing submission revision of the OMG.
    • There is a new Logging Service, aka Telecom Log Service. It is a composite of four separate services, Basic_Logging Service (similar to the previous logging service), Event_Logging Service, Notify_Logging Service, and RTEvent_Logging Service.
    • The final MIOP specification has recently been adopted by the OMG. TAO's MIOP support (located in $TAO_ROOT/orbsvcs/orbsvcs/PortableGroup) enables servants to receive requests sent to multicast addresses. This is performed by creating a GroupId that identifies the multicast group and associating it with one or more servants. Additionally, the Unreliable IP Multicast (UIPMC) pluggable protocol is used to send and receive multicast requests. Multicast endpoints can be created dynamically at runtime.
    • There is a new XML Parser for the Service Configurator. The current syntax is still the default in version 1.3a with the new syntax available as an option. The next version will change the default, but still keep the old syntax available.
    • Many additional regression tests have been added.
    • ACE ported to Windows CE 3 with Pocket PC 2002 SDK, and Windows CE .NET with Standard SDK complete.
    • AIX and HP-UX can now use g++ 3.2 (previous versions of g++ were not reliable on these platforms).
    • The conversion of ACE/TAO documentation to Doxygen has been completed.
    • Support for the Itanium platform with Windows XP, HP-UX, and RedHat 2.1as has been added.

  2. Features added to TAO 1.3a since TAO 1.3.1
    • MakeProjectCreator (MPC) -- MPC can be used to generate build tool specific project files (which is just a collection of source files that make up a single build target) from a generic mpc file. MPC takes platform specific input along with the build tool generic files and generates build tool specific files. Currently supported tools include GNU Make, NMake, Visual C++ 6, Visual C++ 7.0 and others.
    • Redundant Naming Service -- A new option for the Naming Service has been added to allow the Naming Service to use a shared flat file on two or more separate computers. Full capabilities are available only on Tru64 clusters, but limited capabilities are available on any platform that the flat-file persistent Naming Service will run.
    • Shared source on Windows -- It has been possible for users on UNIX and UNIX-like platforms to use create_ace_build to build on multiple platforms from the same source. The capability has been added to do this on the Windows platforms also.
    • Input stream processing -- Input stream processing has been overhauled to eliminate the so-called "parse_magic_bytes" bug. The particular problem was very difficult to cause, and symptoms could vary from occasional unexpected connection closure to full core dump. This change had negligible impact on performance.
    • MAC OS X -- TAO support for the Macintosh OS X operating system has been added to the existing ACE support in TAO 1.3.1.

  3. Important bug fixes since TAO 1.2a
    • Many bugs have been fixed or work-arounds provided since TAO 1.2a. Here we highlight a few of the more important bug fixes since TAO 1.2a, focusing especially on fixes for bugs that could cause crashes, deadlocks, resource leakage, or race conditions. Each bug is referenced by a number as assigned by the DOC group Bugzilla bug database found at

    • 1003: Start up hang with new fixes to ACE_TP_Reactor
    • 1020*: (partial-solution) Client crash when TAO_Transport closes a connection, race condition
    • 1025: ORB loses memory
    • 1061: Server blocks indefinitely on shutdown when using shmiop
    • 1125: Stack grows out of bounds when large data is being flushed (also fixed in TAO 1.2a_p5)
    • 1129: Problem because of improper closure of connections
    • 1131: Add support for connection timeouts
    • 1175: Select_Reactor_Notify deadlocks when the notify queue is enabled (also fixed in TAO 1.2a_p2)
    • 1185: ORB blocks during connect() calls
    • 1202: ORB crashes if peer exits or dies while running nested event loops
    • 1222: ORB stack overflows with crashes during write()
    • 1230: Problems with usage of reactor->notify () calls within the ORB
    • 1235: SEGV in CORBA::ORB_init if non-existent file is specified with -ORBSvcConf option
    • 1247: TAO_Cache_Manager never purges cache entries for server-side connections
    • 1265: Potential ORB deadlocks during shutdown
    • 1269: ORB crashes if peer dies while ORB is blocked trying to send
    • 1270: ORB/Reactor segfaults if peer dies while trying to write
    • 1274: Crash-producing race conditions in Transport Cache management
    • 1305: TP_Reactor can reach inconsistent state and get into tight spin loop (also fixed in TAO 1.2a_p6)
    • 1344: Deadlock if POACurrent is resolved before RootPOA
    • 1361: TP_Reactor -- Closed handle resumed leading to crashes
    • 1382: Another race condition in TAO_Transport class
    • 1487: Exceptions returned from AMI invocations get leaked

    * Bug 1020 ( deserves special explanation. The problem, as described in the bug report, could cause a multithreaded client with a connection to a server to crash if the server died. A client thread, trying to send a request to the server, may attempt to close the connection. Meanwhile, another thread might awaken in the reactor and also attempt to close the connection, resulting in a segmentation violation and crash. The partial solution, designed and implemented by Balachandran Natarajan, is similar in spirit to how the TCP state machine models connection teardown. Connection closure in the ORB is now modeled as an event that is handled through the ORB's leader-followers mechanism. In addition, event handling along the invocation path and along the connection handling path were separated for better separation of concerns. A regression test, $TAO_ROOT/tests/Bug_1020_Regression, was also added.

  4. Pending bugs/fixes in TAO 1.3a
    • There is a bug in CDR operator generation for octet sequences. While this bug does not cause incorrect behavior it greatly affects the performance of octet sequences.
    • There is a pending change to the IDL compiler to fix a problem where the compiler gets confused due to multiple slashes in paths.
    • The various tutorials in the ACE_wrappers/TAO/docs/tutorials/ directory have not been tested and may not run correctly out-of-the-box.

  5. Features added and bugs/fixes in TAO 1.3a_p1
    • The examples from the TAO Developer's Guide have been added to the distribution and are built and run on the supported platforms.
    • There have been extensive improvements made to the Make Project Creator and its use in ACE/TAO. It is now the default build mechanism. All parts of ACE/TAO have been converted to use MPC.
    • The support for wide character sets has been enhanced.
    • The multithreaded part of the Naming Service Test ($TAO_ROOT/orbsvcs/tests/Simple_Naming/) fails intermittently on several platforms. This failure is in the test client and does not appear to be a problem with the Naming Service itself. The problem appears to be with the default transport multiplexing strategy used by the ORB. The default strategy is to multiplex the use of the connection (-ORBTransportMuxStrategy muxed) and the problem only occurs when the connections are very heavily used. The problem does not occur if an exclusive strategy (-ORBTransportMuxStrategy exclusive) is used. It is unknown, but suspected that this problem may be related to Bug 1020 mentioned above.
    • The ImR is at least partially functional in 1.3a. Some known problems are:
      • Activator has no way to shutdown cleanly, and hence doesn't unregister from the locator.
      • Locator also has no way to shutdown cleanly.
      • Persistence does not appear to work, but that could just be a problem with the test.
      • Performance is poor.
      • The activator needs to notice when a server is down, and automatically remove it from the locator.
      • Servers should self-register without requiring "tao_imr add".
      • Activator does not shutdown its servers when closing.

    • Support for the Green Hills Integrity OS (ACE/TAO) and the Green Hills tool kit (ACE only) has been added.

  6. Features added and bugs/fixes in TAO 1.3a_p2
    • Thread Specific Storage has been fixed for VxWorks 5.5 The VxWorks 5.5 loader has a strange quirk where complex static objects could be constructed multiple times during static construction and normal thread execution.
    • The ACE_Log_Msg has been fixed for using SYSLOG.
    • The ACE reactors have been changed to reference count the Event Handlers. This mechanism is particularly needed for multi-threaded applications that can have multiple threads executing upcalls on a handler that needs to be shutdown in a safe manner.
    • fixed bug 1237 - Race condition while handling location forwards
    • fixed bug 1572 - Deadlock in AMH calls if no response is sent
    • The IFR_Service's multicast discovery has been changed to default to off. The option -m enables multicast and -l (lowercase L) enables locking.
    • The Portable Interceptors have been changed to not try to marshall parameters during location forwards.
    • The transport has been changed to close a connection when it receives a partial GIOP header.
    • The file TAO/orbsvcs/orbsvcs/AV/md5c.c has been renamed to TAO/orbsvcs/orbsvcs/AV/md5c.cpp This was done because 64-bit compilers have trouble with the syntax as plain C.
    • NOTE: To build the TAO_AV library, DELETE the $TAO_ROOT/orbsvcs/orbsvcs/AV/md5c.c file.
    • There are warnings when building some of the ORB services on Macintosh and VxWorks operating systems. These are a result of unusual linking methods of templates on these systems.

  7. Features added and bugs/fixes in TAO 1.3a_p3
    • Tutorials: TAO/docs/tutorials has been updated and builds on multiple platforms. These tutorials may not execute on all systems and may have trouble building on static and exceptions=0 builds.
    • fixed bug 1614 - Possible crashes due to bad code in send_connection_closed_notifications_i().
    • corbaloc parser changes: The code responsible for parsing corbaloc style object references is refactored to enable the use of novel protocols in the address definition. This new feature enables protocols not shipped as part of TAO to be used with corbaloc or corbaname strings for resolving remote addresses.
      To support this feature, a new virtual method is added to the base class TAO_Connector, corbaloc_scan(). The signature of the method may be found in $TAO_ROOT/tao/Transport_Connector.h:
        virtual TAO_Profile * corbaloc_scan (const char *ior,
                                             size_t &len
      This method is responsible for locating the end of the protocol specific address, returning a partially completed profile (the object key will be filled in later) and returning the length of the scanned address as the out parameter "len." The default implementation assumes that comma (',') and slash ('/') will not appear in the address, and will use the contents of the ior string upto the next comma or slash to populate the profile. If commas or slashes are valid parts of your protocol's address, as they are with Unix domain sockets (see UIOP), then you must supply your own implementation of corbaloc_scan to find a protocol specific address terminator. In such a case, the protocol specific address terminator will still be followed by a comma or slash, as required by the CORBA spec.
      To maintain backwards compatibility with earlier TAO implementations, the UIOP implementation of corbaloc_scan will accept strings that end with a pipe ('|') that is not followed by a comma or slash. In this case, the remainder of the string is treated as the object key and a warning is generated.
    • A new header file $ACE_ROOT/ace/Codeset_Symbols.h defines symbolic names for all of the code sets defined in OpenGroup's code set registry database version 1.2g ( )
      Three new symbols are defined to allow compile-time configuration of native code sets.
      ACE_NATIVE_CHAR_CODESET_ID defines the native codeset used for 8 bit characters.
      ACE_NATIVE_WCHAR_CODESET_ID defines the native codeset used for wide characters.
      ACE_NATIVE_WCHAR_SIZE defines the width of a typical (not escaped or surrogated ) code point in the native wide character code set.
      The symbols can be defined in $ACE_ROOT/ace/config.h. If they are not defined there, the following default values are used:
          # define ACE_NATIVE_WCHAR_SIZE 2
      These default values are the ones that were previously hard coded into TAO.
      Note: ISO 8859_1 is also known as Latin-1 and ISO_UTF_16 is a version of Unicode.
      The UCS4 to UTF16 character translator in $TAO_ROOT/tests/CodeSets/libs/UCS4_UTF16 has been extended to honor the Byte Order Marks (BOM) allowed (but not required) in GIOP 1.2 and to use and honor UTF-16 surrogate chacters. Note that UTF-16 surrogate characters are an escape mechanism that allow characters wider than 16 bits to be represented in UTF-16.



All of the Solaris builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the SunOS platform and compiler.

Files Used for SunOS Builds
SunOS 5.7 with g++ 2.95.3platform_sunos5_g++.GNUconfig-sunos5.7.h
SunOS 5.8 with g++ 3.2.1platform_sunos5_g++.GNUconfig-sunos5.8.h
SunOS 5.7 with Sun C++ 5.3platform_sunos5_sunc++.GNUconfig-sunos5.7.h
SunOS 5.8 with Sun C++ 5.3platform_sunos5_sunc++.GNUconfig-sunos5.8.h
SunOS 5.9 with Sun C++ 5.4platform_sunos5_sunc++.GNUconfig-sunos5.9.h

Sun C++ Notes

Use the fast=1 instead of optimize=1 for optimizing with Sun compilers because it selects a combination of compilation options for optimum execution speed. Other optimization levels may reduce the footprint, but do not have a corresponding flag in ACE/TAO.


No ACE tests fail on any platform. A scattering of TAO tests fail, but no test/feature fails across platforms.



All of the Red Hat builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the Linux platform and compiler.

Files Used for Red Hat Builds
RedHat 7.2 with g++ 2.95.3platform_linux.GNUconfig-linux.h
RedHat 7.3 with g++ 2.96platform_linux.GNUconfig-linux.h
RedHat 8.0 with g++ 3.2platform_linux.GNUconfig-linux.h
RedHat 2.1AW on Itanium with g++ 2.96platform_linux.GNUconfig-linux.h

Red Hat 7.x gcc 2.96 Notes



All of the Windows builds used the recommended OCI build flags in a config.h file as shown below.

Files Used for Windows Builds
Windows XP sp1 with Visual C++ 6 sp5config-win32.h
Windows 2000 sp3 with Visual C++ 6 sp5config-win32.h
Windows 2003 Enterprise VC++ 7.1config-win32.h
Windows 2000 sp3 with Borland C++ 5.5config-win32.h
Windows XP sp1 with Borland C++ 5.5config-win32.h
Windows XP Itanium with Microsoft C++ cross-compiler for Itaniumconfig-win32.h

We also test infrequently using a wider variety compilers. Various combinations of the following. We're reasonably sure that most sensible versions of the following will work correctly, but we can't guarantee a configuration unless we test it regularly.

Operating Systems

  • Windows XP sp1
  • Windows 2000 sp3
  • Windows 2003 Enterprise
  • Windows XP Itanium


  • Visual C++ 6 sp5
  • Visual C++ 7.1
  • Borland C++ 5.5 using make
  • Microsoft C++ using nmake


  • Original SDK
  • February 2003 Platform SDK
  • STLport 4.5.3

The following config.h file is used for all Windows nightly builds.

// contents of config.h
#include "config-win32.h"

The first line disables the popup of error windows when running the automated tests. It is not normally needed for ordinary user programs. It would only be used if an automated build was being done.

The platform_macros.GNU file is not used for Windows platforms.

Compile Notes
  • There are some warnings when compiling using Visual C++ 7.1
  • If using MPC to generate build files, then by default qos and ssl, and any projects that depend on these libraries will not be generated. To enable these features, simply create a text file called ACE_wrappers\bin\MakeProjectCreator\config\default.features with the following contents.
    ssl = 1
    qos = 1
  • When building static libraries you may have to build twice. The first time will generate the IDL, and compile everything that didn't rely on idl-generated files that don't exist. The second time will finish building files now that the idl-generated files exist.
  • To use Visual C++ 7.1, you must use MakeProjectCreator (MPC) to generate the project files. Assuming ACE_wrappers\bin is in your path, you can simply run the following command from the ACE_wrappers directory. -type vc71 -recurse
    This will generate all Solutions and Project files. (Some tests and examples are not finished yet, but will likely be included in a subsequent patch release.) You can generate project files for Visual C++ 6 and other platforms in exactly the same way.

Execution Notes
  • The Itanium release build may not run on some older platforms. The build was done with the Feburary 2003 SDK and it appears to be incompatible with our earlier versions of the DLLs delivered with HP Itanium with Itanium Windows 2002. The Itanium debug build runs on the same platform.

You can now use this perl script to set up a build for ACE/TAO, so that multiple builds can share a single code base (this is a new feature with 1.3a). You must run this command from within the ACE_wrappers directory, and ACE_wrappers\bin should be in your path. Example: vc71
Running this command will create a directory called ACE_wrappers\builds\vc71. Most of the directory structure under ACE_wrappers will be duplicated under this directory, and hard links will be created back to the files under ACE_wrappers. For example, if you modify ACE_wrappers\ace\OS.h, then ACE_wrappers\builds\vc71\ace\OS.h will automatically be modified. Windows does not support symbolic links, so that if you delete a file, it will not automatically be deleted. If you then add a new file with the same name as the old one, it will not be linked. To refresh your links in this case, you can run without any options, and it will update all links for every build. You can set up as many builds as you want by simply running the script again with a different argument.

By default, it's assumed that you will use MPC to generate any project files for the new build, so no project files or Makefiles are linked from ACE_wrappers.


A scattering of ACE and TAO tests fail, but no test/feature fails across platforms. In addition, the notify service will not load when building release mode Borland 5.5. (This will likely be fixed in a subsequent patch release.)



The Tru64 builds used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the Tru64 platform and compiler.

Files Used for Tru64 Builds
Tru64 5.1a with cxx V6.5-021platform_tru64_cxx.GNUconfig-tru64.h

In addition

The default ulimits on these platform are not sufficient to build TAO. The problem is the virtual memory limits, vmemory and data must be increased to the maximum allowed. For us, this is vmemory=4194304 and data=1048576.

In addition the operating system must be configured to have larger limits for semaphore operations.

  sem_mni = 250
  sem_msl = 125
  sem_opm = 100
  sem_ume = 100

CXX Notes

There is a problem with the Naming Service when built with Compaq C++ compilers and optimization. The source in question is Bindings_Iterator_T.cpp and the modules that use this are Persistent_Naming_Context.o and Transient_Naming_Context.o in library The problem exists on C++ V6.2 to V6.5 and on UNIX 5.1 and 4.0F. The problem occurs at all optimization levels from O1 through O4. It is unknown when a fix will be available


2 ACE tests fail

  • FIFO appears to be a problem in Tru64 itself. The feature itself is not used in TAO, so does not affect normal TAO operation.
  • On the surface, the Multicast_Test seems to indicate that Tru64 works differently than other systems (at least what Multicast_Test expects).
A scattering of TAO tests fail, but no test/feature fails across platforms.



All of the AIX builds used the recommended OCI build flags OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the AIX platform and compiler.

When using GNU Make that is part of AIX toolbox for Linux applications, it may be necessary to modify the file access permissions of the make executable to ensure the LIBPATH environment variable is propagated to make system properly. This can be done as follows:

chmod 755 /opt/freeware/bin/make

See this message for further information.

Files Used for AIX Builds
AIX 5.1 with VA C++

NOTE: The preprocessor for VA C++ 5 does not function correctly when used by tao_idl. Therefore, the GNU Preprocessor was used for tao_idl by setting TAO_IDL_PREPROCESSOR=g++ in platform_macros.GNU.


No ACE tests fail on this platform. The AVStreams tests are known not to work on this platform.



All of the HPUX builds used the recommended OCI build flags OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the HPUX platform and compiler.

Files Used for HPUX Builds
HPUX 11.00 on PA-RISC2 with HP ANSI C++ B3910B A.03.27platform_hpux_aCC.GNUconfig-hpux-11.00.h
HPUX 11.20 on Itanium with HP ANSI C++ B3910B A.05.32platform_hpux_aCC.GNUconfig-hpux-11.00.h


No ACE tests fail on HP-UX 11.00. The ACE Multicast_Test fails on HPUX 11.20 due to platform implementation differences. The TAO RTCORBA tests fail due to lack of support for the HP-UX thread priorities.



The SGI IRIX build used the recommended OCI build flags in addition to the platform_macros.GNU and config.h files already set up for the IRIX platform and compiler.

Files Used for IRIX Builds
IRIX 6.5 with MIPSpro Compilers: Version 7.4platform_irix6.x_sgic++.GNUconfig-irix6.5.x-sgic++.h


The ACE Multicast test fails due to platform implementation differences. A few TAO tests fail. In many cases this is due to a possible bug in the way the compiler deals with exceptions. For one test, TAO/tests/AMH_Exceptions/, the test server locks up and cannot be killed. This test will not be executed if ACE_wrappers/bin/ is used the run the tests.



All of the MACOSX builds used the recommended OCI build flags in addition to revised platform_macros.GNU and config.h files developed for the MACOSX platform and compiler.

Files Used for MACOSX Builds
MACOSX 10.2.6 with g++ 3.1platform_macosx.GNUconfig-macosx.h

In addition

The Apple Developer Kit Dec 2002 is required and two additional packages will have to be loaded from open source available on the net.

  • dlcompat is required for implementing dynamic library loading. It can be obtained directly from and built. Or a pre-built version may be loaded with fink ( If the fink version is used, you will need to add:
          #define ACE_NEEDS_DL_UNDERSCORE
    to your config.h file.
  • Certain parts of the TAO will not build with the version of gmake in the versions of MACOSX 10.2 available as of this writing. You will need to download gmake version 3.80 (or better)


The major problem with getting TAO to run on MACOSX was lack of full initialization of static objects. About half of the tests were failing. Apple is aware of the problem, but a fix does not appear to be imminent. Seems to be somewhat difficult problem with some legacy implications. Thus, for ACE/TAO the Mac will not be supportable for any earlier versions than 1.3a of ACE/TAO and 10.2.x of MACOSX.

There are three or four environment variables that are required to be defined in the user's environment.

  • DYLD_LIBRARY_PATH which operates as LD_LIBRARY_PATH on most other UNIX like systems.
  • DYLD_BIND_AT_LAUNCH=1 is required to make the dlcompat package work. This package is used to implement the dynamic loading used by the Service Configurator. When this is set, the dynamic linker binds all undefined symbols the program needs at launch time. This includes function symbols that can are normally lazily bound at the time of their first call. When Apple gets around to providing this capability natively, we may be able to eliminate this variable; that would be good since it adversely affects performance.
  • MACOSX_DEPLOYMENT_TARGET="10.2" is requires to get rid of a lot of annoying warning. It might also fix a couple of things that we have worked around.
  • And, if you are building ACE/TAO and wish to run the tests,

  • ACE_RUNTEST_DELAY provides a multiplier to the times specified in a test. ACE_RUNTEST_DELAY=2 is needed to make more than 20 tests run in that the DYLD_BIND_AT_LAUNCH=1 slows process startup beyond the 5 seconds allowed for startup.


2 ACE tests fail

  • The Process_Mutex is broken on MACOSX and has been reported to Apple. It is needed in TAO for AV and some other places. The implementation uses a POSIX named semaphore, as the OS does not implement either system level mutex or SYSV style semaphores that are used in other implementations. Apple is looking at this problem.
  • The MEM_Stream_Test fails since it uses a Process_Mutex.
Several TAO tests fail.
  • The exception part of the two Param_Tests fails. The problem here is that the compiler interprets the exception spec literally. The test tries to trick the compiler into throwing an exception that is not defined. What happens is the unexpected exception is actually caught and, since it is not handled, the process aborts.
  • 10 orbsvcs tests fail in debug build but not in optimize build. This is likely a timing issue, but will need further work.
  • 4 AV tests fail and the tests that use SHMIIOP, probably because they require a Process_Mutex, which is known to be broken.
  • Several RTCORBA tests fail due to the lack of get_prio.
Conclusion: ACE/TAO and MACOSX both need a bit more work, but 1.3a should be usable for most CORBA applications with the restrictions noted in the test section above.



The VxWorks builds used the recommended OCI build flags with static libraries only and no exceptions in addition to the platform_macros.GNU and config.h files already set up for the VxWorks platform and compiler.

Files Used for VxWorks Builds
Tornado 2.2 with g++ 2.96platform_vxworks5.x_g++.GNUconfig-vxworks5.x.h

The build was cross-compiled on a Solaris platform for a PPC 604 target. A cross-compile using Windows for a PPC 604 target has also been done.

Build Notes

The VxWorks build was for static libraries only, since that is the most common use on this platform. Also, the build was without native exceptions again, since that is the most common.

This build also uses "#define ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION" in its config.h since it was found that implicit template instantiation does not work in all cases.

Not all of the orbsvcs and orbsvcs tests will build on VxWorks.


Basic ACE and TAO tests work on VxWorks.



These are platforms for which some amount of work has been done. This does not mean that these platforms are fully supported, only that they may be usable in circumstances similar to those in which they were tested.

The 5.3a version of ACE has been built and tested with the Green Hills tool kits versions 3.5 and 4.0 on both Solaris for Solaris, Solaris for VxWorks, and Linux for Linux.

The 1.3a version of ACE/TAO has been built with the Green Hills Integrity toolkit 4.0 running on Windows for the Green Hills Integrity OS. Green Hills Integrity is a fairly new Real-Time OS for embedded systems. As such, systems on which it runs are generally limited in the resources which they can provide. For example, the system on which we tested was very limited in memory, so very little of the standard tests could be run.



If you're doing your own build, you can have the following flags set which OCI uses in its own builds. For UNIX and UNIX-like platforms that use GNU Make, use platform_macros.GNU. For Windows/Visual C++ builds, use config.h. If an option is not listed below, let it default.

Turned on:
exceptions=1#define ACE_HAS_EXCEPTIONS (not on VxWorks)
inline=1#define __ACE_INLINE__ (unless not supported by the compiler)
ami=1#define TAO_HAS_AMI 1
rt_corba=1#define TAO_HAS_RT_CORBA 1
smart_proxies=1#define TAO_HAS_SMART_PROXIES 1
interceptors=1#define TAO_HAS_INTERCEPTORS 1
interface_repo=1#define TAO_HAS_INTERFACE_REPOSITORY 1
corba_messaging=1#define TAO_HAS_CORBA_MESSAGING 1
shared_libs_only=1no equivalent (not on VxWorks, use static_libs_only=1)

Turned off:
probe=0no equivalent
profile=0no equivalent

Variable--dependent on platform and other settings:
optimize=[0|1] (= !debug)
fast=1 ONLY FOR SUNOS C++, non-DEBUG builds instead of optimize=1

For Windows Only

Use the macros to set things up in a config.h file.

For Windows 95/98, add

   #define ACE_HAS_WINNT4 0
for additional information see