HP OpenVMS Systemsask the wizard |
The Question is:
I have user library of C++ modules. The build command was :
$ library/create/object usrlib [ list of modules ]
I can link applications as long as I have some stuff at my cxx_repository, that's been created when I compiled modules for usrlib. Once I lose the cxx_repository files, I get 'unresolved references' when trying to link. What information regarding the link
ing with C++ library might help in that way ?
The Answer is :
The specified LIBRARY command loads a specified list of object modules
into an object library. (It is not what would normally be refered to
as a "build" command.)
With C++, one normally uses the CXXLINK facility to link programs.
CXXLINK is a wrapper around LINK, and you can use CXXLINK/LOG to see
what CXXLINK is doing with LINK.
If you do not use templates, then you will likely want to specify the
/NOTEMPLATE_PRELINK and /REPOSITORY qualifiers on the CXXLINK command.
You will also want to be aware of the /[NO]TEMPLATE_DEFINE=opt (or the
#pragma define_template cmmand) and the /REPOSITORY compiler qualifiers,
as well as the compiler's include (template) processing.
The section of the DEC C++ user documentation that covers the linking
of C++ applications might be of interest to you, and the section on
using C++ templates will definitely be of interest. (Work that will
improve the user-visible behaviours involved with building applications
with templates is expected.) The documentation also includes recommended
organization of C++ code for code that does and does not use templates,
and for how to build a standalone library (containing object code and
templates)
Here is an example of a C++ object library creation procedure:
$ define/trans=concealed lroot disk:[windows_library.]
$ define lbuild lroot:[build]
$!
$! Compile and partially link each source separately using the same repository:
$!
$! /repository option causes all template instantiation files and objects
$! to be placed in the [.build.repository] directory; you must specify
$! the same repository for each cxx and cxxlink command
$!
$! /object option causes the source object files to be placed in the build
$! directory
$!
$! cxxlink/noexe commands ensure that both the source and template
$! instantiations are compiled but no executable is generated
$!
$ cxx lroot:[src]w1.cxx /include=lroot:[include] -
/repos=lroot:[build.repository] /object=lbuild:w1.obj
$ cxxlink/noexe lbuild:w1.obj /repos=lroot:[build.repository]
$!
$ cxx lroot:[src]w2.cxx /include=lroot:[include] -
/repos=lroot:[build.repository] /object=lbuild:w2.obj
$ cxxlink/noexe lbuild:w2.obj /repos=lroot:[build.repository]
$!
$! ... and so on for all library source files
$!
$! And now place all the source objects and template instantiation objects
$! into the object library
$!
$ lib/create lbuild:libwindows.olb lbuild:*.obj,lroot:[build.repository]*.obj
|