Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

Miscellaneous Notes for ACE/TAO and Microsoft Visual C++

Here are just some random information about ACE/TAO with Microsoft Visual C++. This is more a collection of ideas right now, so it may not be as polished as other ACE documentation.

Configurations

MSVC project files come with several configurations. The main two are Debug and Release. Debug produces libraries and executables with debugging symbols and doesn't enable inlining. The Release configuration enables optimizations and leaves out debugging symbols. All projects (with the exception of some of the tests) contain both configurations. Most of the libraries also contain four more, Static Release/Debug and MFC Release/Debug.

Different configurations produce different libraries and executables. For example, Debug versions of dynamic libraries are always named *d.dll (like aced.dll) and the executables are placed in the current directory. Release versions of dynamic libraries are named *.dll (such as ace.dll) and their executables are usually placed in the Release subdirectory. Other common suffixes include *sd.lib for Static Debug and *s.lib for Static Release.

Projects only use the same configuration versions of the libraries. The Debug version of an ACE example only uses

How to Set Other Options

Other compile time options are set or unset via the config.h file. For example, to turn on a compile time definition, define it at the beginning of config.h. Unsetting a definition just requires define ACE_FOO 0 or a undef at the end of the file (after including config-win32.h). Different macros require different techniques.

ACE/TAO Libraries

I don't think we have any documents really giving any info on what libraries are produced by the MSVC project files.

So unlike the Unix platforms, Win32 libraries do not have a prefix of "lib", instead it is used as an extension. For example, the debug version of the dynamic ace library is aced.lib (which is a stub for aced.dll). The three ACE libraries are:

And for TAO we have the main TAO library and several sub libraries which contain extra features of TAO that aren't always needed (such as the POA in TAO_PortableServer).

And finally we have the orbsvcs libraries. Each ORB service is contained in its own library. More libraries may be needed to be linked in, since some services require the use of others (such as TAO_AV requiring TAO_CosTrading and TAO_CosProperty).

The *.lib files are located in the directory where the project that creates them exists. The *.dll files are usually placed in ACE_wrappers\bin (so you only need to add one directory to your path).

I hesitate to put down explicit instructions on what libraries need to be linked in, considering that the libraries are being split apart more and more for footprint purposes. For most ACE stuff, you will only need to link in ace.lib. For plain TAO clients TAO.lib is enough. TAO servers also require TAO_PortableServer.lib for the POA. If the TAO application uses Dynamic Anys, TAO_DynamicAny.lib is also needed. Then if any of the ORB Services are used, more libraries are needed. For example, a client that uses the Name Service would need to link TAO_CosNaming.lib.

And note that the release versions of the libraries are listed above. For debug configurations the libraries would be aced.lib, TAOd.lib, etc.

External ACE/TAO Projects

It is a little difficult for us to list how exactly one should create projects that use ACE/TAO but are external to the ACE_wrappers tree. Since most projects we create are in that tree, we can make assumptions about directory structure that doesn't always apply for external projects. In other words, we have ideas how they should work, but they usually remain a bit, um, untested. :-)

There are three main dependencies a project would have on ACE/TAO.

So I guess in summary we would recommend adding most of the settings to Visual C++'s global settings (include paths, library paths, and executable paths) and just refer to the libraries without any paths.

ACE_ROOT

ACE_ROOT is an interesting environment variable. Even though it is heavily used on Unix (in fact, ACE/TAO will not compile without it) it really isn't needed for MSVC. The reason for this is that we were interested in making configuration and setup really easy for Visual C++ on Windows. In retrospect it might have made quite a few things easier to specify if ACE_ROOT was required. One thing you might notice is that TAO_IDL will display a message if ACE_ROOT isn't set, but it is only a problem if the IDL file includes <orb.idl> and you don't use -I to specify where orb.idl is.


Generated on Wed Jan 14 22:51:12 2004 for ACE by doxygen1.2.18