|
This page contains Frequently Asked Questions (FAQs) about ACE in general, about concerns commonly voiced about Open Source Software, and about problems which can arise. If you are looking for a list of known defects
and enhancement requests, please click here.
- General
- Open Source Software
- ACE Build Issues
- ACE Programming Issues
- Platform-specific Issues - AIX
- Platform-specific Issues - HP-UX 10.20
- Platform-specific Issues - HP-UX 11.00
- Platform-specific Issues - Linux
- Platform-specific Issues - Windows NT
General
What is ACE, and where did it come from?
- ACE is short for ADAPTIVE Communication Environment. ADAPTIVE is an acronym for something that probably only Doug Schmidt remembers. Dr. Schmidt wrote ACE as part of his doctoral research to solve many
of the problems we all deal with every day but have gotten too used to. ACE is now the basis and vehicle for continuing research efforts in high-performance distributed object systems, and enjoys a
growing user base in the commercial world as well.
How do I get ACE, and is it really free?
- Yes, it really is free, in both senses of the word. Please visit the ACE Kits page for complete information on downloading ACE.
What platforms has ACE been ported to?
- ACE has been ported to a wide variety of platforms from handheld and embedded systems to supercomputers. The current list is below. Platforms that are in bold
are supported by Riverace. Please see the ACE Support page for complete details on supported platforms and support services. ACE has been ported to:
- AIX (4.3 and 5L)
- Chorus
- Cray
- Digital UNIX (4.0 and 5.0)
- FreeBSD
- HP-UX (10.20 and 11.x)
- IRIX (6.x)
- Linux (on x86, PPC, Alpha hardware)
- LynxOS
- MVS Open Edition
- NetBSD
- PharLap TNT Embedded ToolSuite (9.1)
- pSoS
- QNX Neutrino (2.0)
- SCO Openserver
- Solaris (2.5, 2.6, 7, and 8)
- SunOS (4.x)
- Tandem
- Unixware
- VxWorks
- Windows (NT4 [x86 and Alpha], Win 2000, 95, 98, CE).
- Open Source Software
Won't I have to give away my source code if I use ACE?
- No. ACE is not governed by the GNU Public License (GPL). It has its own usage and copying agreement. You can find it in the ACE source kit, in the top level directory, in a file
named COPYING. The file in the kit is the one which governs your use of ACE, but you can also read a copy of it here. In short, you can use
ACE for whatever you want - just don't try to claim ownership or copyright of it.
ACE Build Issues
How do I build ACE on <my platform>?
- The most up to date information, in general, on how to build ACE on the platforms it has been ported to is in the file ACE-INSTALL.html, in the top-level directory of the ACE source kit. A recent copy of
that file is provided here, for your convenience. NOTE - the ACE-INSTALL.html file is written from the point of view of the
Center for Distributed Object Computing at Washington University and some terms conflict with terms Riverace uses, such as "supported".
Why Doesn't Autoconfigure Work?
- Autoconfigure support is partially implermented starting in ACE 5.1, but is not completed. If you wish to have Riverace complete this work for you, please contact Steve Huston at Riverace and inquire
about custom development services.
ACE Programming Issues
Where can I get documentation?
- The man pages for ACE can be reached via the Documentation page. There is also a nice set of tutorials in the 'docs/tutorials' directory of each ACE kit, and there are some other very useful HTML format documents in the 'docs' directory. You can also read a wide variety of papers addressing ACE in detail at Doug Schmidt's ACE site.
Platform-specific Issues - AIX
What patches should I use with AIX 4.2.1 and C Set++ 3.1.4?
- The following table lists the recommend patches for building and running ACE on AIX 4.2.1 using C Set ++ for AIX. These are not the latest patches, and it is possible that there are newer ones that work
at least as good. There are newer ones that do not work, so don't commit them until after you've tested everything. Riverace Corporation makes this list available as a service to its users, and does not
warrant the patches in any way. Talk to IBM about that. All of these patches are available from the RS/6000 Support Center. Riverace
recommends using the FixDist utility, available from the above-mentioned site, to manage patches.
xlC.Bnd
|
3.1.4.0
|
C for AIX and C Set ++ for AIX
|
xlC.C
|
3.1.4.10
|
C for AIX Compiler
|
xlC.C++.cmp
|
3.1.4.9
|
C Set ++ for AIX Compiler
|
xlC.C++.heapview
|
3.1.4.4
|
C Set ++ for AIX Heapview
|
xlC.C++.lib
|
3.1.4.6
|
C Set ++ for AIX Compiler
|
xlC.cpp
|
3.1.4.5
|
C for AIX Preprocessor
|
xlC.rte
|
3.1.4.8
|
C Set ++ for AIX Application
|
|
Why Does ACE Fail to Link: ld: 0711-317 ERROR: Undefined symbol: .__CurrentException
- When building on AIX 4.2.1, using the xlC V3.1.4 compiler, you may get the following error when building the ACE shared library:
makeC++SharedLib_r -p 0 -o libACE.so -bI:/lib/pse.exp -L/usr/local/src/ACE_wrappers/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
To fix this error, you need a patch to the supporting xlC related libraries. To obtain this patch, go to the IBM public patch website and retrieve the patch PTF U453697, or its successor, for
xlC. 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.
Many thanks to Susan Liebeskind for writing up the details on how to solve this problem.
- Platform-specific Issues - HP-UX 10.20
How Can I Use Threads on HP-UX 10.20?
- If you wish to use threads when building ACE (this is the default setting in config-hpux-10.x.h) you must install the DCE-CoreTools.DCE-BPRG package from the HP-UX Core OS CD
before building ACE, or using the pre-built, installable ACE kit. The installation procedure for the pre-built kit will warn you that the corequisite is missing.
Memory Leak Using Threads and std::string
- On HP-UX 10.20 and compiler version aC++ A.01.18, there is a memory leak in the compiler triggered by the use of the string class from libstd together with threads. To work around this
problem, modify your <string> header file as follows:
Change the header file from: pref()->~string_ref(); to: register string_ref_type *p = pref();
p->~string_ref(); // must use two steps and "p" temp This is not a problem on aC++ versions other than A.01.18, and is not a problem on HP-UX 11.00.
Recommended Patch List for HP-UX 10.20 Using aC++
- The following table lists the recommend patches for building and running ACE on HP-UX 10.20 using aC++. Riverace Corporation makes this list available as a service to its users, and does
not warrant the patches in any way. Talk to HP about that. All of these patches (or their successors) are available from the HP Electronic Support Center.
PHKL_8693 (number depends on your OS and hardware)
|
s700 10.20 sys/time.h fix for select(2)/C++ defects
|
PHKL_12447
|
s700 10.20 SystemV semaphores cumulative patch
|
PHCO_14038
|
s700_800 10.20 libc cumulative header file patch
|
PHSS_10053
|
s700_800 10.01-[12]0 aC++ dld.sl(5) performance fix
|
PHSS_12694
|
s700_800 10.10-20 UCOMP/LIBMP patch
|
|
The recommended compiler version is A.01.21. Any aC++ version from A.01.07 (located on the December 1997 Applications CD) and later should also work fine. The issues with A.01.09
and A.01.12 not working with ACE were resolved at ACE 4.6.
Why does aC++ warn of suppressed future errors when compiling ACE?
- A number of the HP-UX-supplied header files trigger future errors from aC++. The ACE build procedure suppresses those messages, but the compiler issues a diagnostic message to say they
were suppressed. It is safe to ignore them.
Does ACE work with the older HP CC compiler?
- Yes, it should. However, Riverace does not support that compiler with ACE, so it is up to the ACE user community to verify that it still works on new versions of ACE.
- Platform-specific Issues - HP-UX 11.00
Recommended Patch List for HP-UX 11.00 Using aC++
- The following table lists the recommend patches for building and running ACE on HP-UX 11.00 using aC++. Riverace Corporation makes this list available as a service to its users, and does
not warrant the patches in any way. Talk to HP about that. All of these patches (or their successors) are available from the HP Electronic Support Center.
PHKL_13121
|
s700_800 11.00 POSIX semaphore deadlock/hang
|
PHNE_13405
|
s700_800 11.00 cumulative ARPA Transport patch
|
|
The recommended compiler version is A.03.10 (or later). Any aC++ version from A.03.04 and later should also work fine at ACE 4.6 and later.
Build fails with Error 2
- Sometimes a build step (compile or link) will fail without any compiler or linker diagnostics, and a simple message: Error 2. If this happens, it is likely that you need to increase the kernel
parameter maxdsiz. A value of 134217728 (0x08000000) has been found to work well.
Compile fails on HP-UX 11.00 with Error 129 in /usr/include/sys/xti.h
- On HP-UX 11.00, there is a mismatch between macro definitions in the files /usr/include/sys/xti.h and /usr/include/netinet/tcp.h which will yield the following errors compiling ACE:
/opt/aCC/bin/aCC -g -D_THREAD_SAFE -D_REENTRANT -DHPUX_VERS=1100 -I.
-I/usr/ACE/ACE_wrappers -c +Z -o .shobj/Log_Msg.o Log_Msg.cpp Error 129: "/usr/include/sys/xti.h", line 488 # Redefinition of macro 'TCP_NODELAY' differs from previous definition at
["/usr/include/netinet/tcp.h", line 76]. #define TCP_NODELAY 0x1 /* don't delay packets to coalesce*/
^^^^^^^^^^^ Error 129: "/usr/include/sys/xti.h", line 489 # Redefinition of macro 'TCP_MAXSEG' differs from previous definition at
["/usr/include/netinet/tcp.h", line 77]. #define TCP_MAXSEG 0x2 /* get maximum segment size */ If you get this message, upgrade to ACE 4.6 or later, as it has a workaround for this problem in
the HP-UX header files.
Missing signals during accept(), or tests/Conn_Test hangs
- If you have a problem with your program missing a signal, especially during an accept() call (this manifests itself in tests/Conn_Test as hanging the parent test process after the tests have been
completed) you need to get patch PHNE_13405 from Hewlett-Packard.
Compiler warnings about dlopen during 64-bit compile
- If you are compiling ACE in 64-bit mode on HP-UX 11, you may see a warning similar to this:
Error (future) 212: "/opt/ace/ACE_wrappers/ace/OS.i",
line 5722 # Argument type 'const char *' does not match expected parameter type 'char *'.
ACE_OSCALL (::dlopen (filename, mode), void *, 0, handle);
^^^^^^^^^^ Ignore it... it's an inconsistency between the HP-UX header file and the man page for dlopen.
It's been reported to HP and expect it to be fixed in the future. Hopefully before the future error turns into a real one...
Platform-specific Issues - Linux
What config.h file and platform_macros.GNU file should I use on Linux?
- On ACE versions prior to 5.2, use config-linux-lxpthreads.h and platform_linux_lxpthread.GNU. Starting with ACE 5.2, the correct files are config-linux.h and platform_linux.GNU, respectively.
Platform-specific Issues - Windows NT
How Do I Build ACE on Windows NT 4.0 and Run on Windows 95/98?
- To build the ACE library or an ACE application on Windows NT and be able to execute the resulting program(s) on Windows 95 or 98, be sure that your config.h file includes the line: #define ACE_HAS_WINNT4 0
before including config-win32.h.
Using ACE in Non-console situations
- ACE comes "out of the box" ready to build for use in console programs or NT Services. In order to use ACE successfully in other situations, such as an MFC program or indirectly in a
DLL you are building, you must take care to properly initialize ACE at startup time and close it down at rundown time. You can do that in the following ways:
- MFC Program: In an MFC program, the appropriate way to properly initialize ACE is in functions that your CWinApp-derived main application class overrides. In your InitInstance function, call ACE::init() and in your ExitInstance function, call ACE::fini(). The $ACE_ROOT/tests/ACE_Init_Test.cpp has an example of this.
In addition, you should also add #define ACE_HAS_MFC to your config.h file before building ACE. (On ACE 5.0 there is a workspace project setting to build an MFC
version, so you don't need to do anything special except build that version).
- Your own DLL: The best way to insure ACE's proper initialization and shutdown is to add exported functions to your DLL which its users must call to initialize it and shut it
down. In these functions, call ACE::init() and ACE::fini, respectively. It is inadvisable to call ACE::init() and ACE::fini() from your DLL's DllMain
function, though in limited cases where your DLL and the programs using your DLL are exceedingly well-behaved, you may be able to get away with it.
|