| Title: | C++ |
| Notice: | Read 1.* and use keywords (e.g. SHOW KEY/FULL KIT_CXX_VAX_VMS) |
| Moderator: | DECCXX::AMARTIN |
| Created: | Fri Nov 06 1987 |
| Last Modified: | Thu Jun 05 1997 |
| Last Successful Update: | Fri Jun 06 1997 |
| Number of topics: | 3604 |
| Total number of notes: | 18242 |
Hello,
recently I sent CXX560T03 to a customer to fix a problem.
This new FT version fixed the problem but they got a new one. They are
working
on DUNIX V4.0A. Here's the description.
--------
The template instantiation still has a severe problem. We linked our product
and had lots of undefined template symbols in our libraries.
As written in the manual we produce the libraries as shared libraries, while
we compile our files with the -Hf option to force immediate instantiation.
Then we link the library together with all objects in the repository.
So far so good.
Now I found out that in the repository the file xxx.req contains the members
that are really needed.
E.g:
cat List__T18AUPRUL_CONDITION_T.req
__ct__27List__T18AUPRUL_CONDITION_TXRC27List__T18AUPRUL_CONDITION_T
__dt__27List__T18AUPRUL_CONDITION_TXv
__vc__27List__T18AUPRUL_CONDITION_TXUi
getAt__27List__T18AUPRUL_CONDITION_TXi
which obviously means that the compiler needs the copy constructor, the
destructor, the operator[] and the getAt Function.
Now the bad thing is that this file is deleted as soon as the next object
in the same library requires the same template.
E.g.
A.cxx has code like
List<AUPRUL_CONDITION_T> l; ...
B.cxx has code like
void f(List<AUPRUL_CONDITION_T> l)
{
...
}
So first A.cxx is compiled, which produces a List__T18AUPRUL_CONDITION_T.req
containing the default constructor.
Then B.cxx is compiled , which produces a List__T18AUPRUL_CONDITION_T.req
containing the copy constructor BUT NOT the default constructor anymore.
Therefore the code for the default constructor is gone and we have an
unresolved
symbol in the end...
As we have huge amounts of templates a fast solution for this problem would
be appreciated very much.
--------
Is this a known problem? Can a fix be expected for V5.6?
Thanks in advance for any infos.
Regards,
Fran�ois V.
[Posted by WWW Notes gateway]
| T.R | Title | User | Personal Name | Date | Lines |
|---|---|---|---|---|---|
| 3565.1 | how about creating some dependencies? | DECC::J_WARD | Mon May 12 1997 09:32 | 18 | |
How about doing the following (presuming you are using a makefile):
A.cxx:
cxx -Hf A.cxx
B.cxx: A.o
cxx -Hf B.cxx A.o
or you can simulate this on the command line, i.e.:
rm -fr cxx_repository
cxx -Hf A.cxx
cxx -Hf B.cxx A.o
We use this technique in the script that builds the
standard "common instantiation" library.
| |||||
| 3565.2 | NNTPD::"[email protected]" | Fran�ois Vorburger @RLE | Wed May 14 1997 08:19 | 15 | |
The customer is compiling a large application with approx. 800 objectfiles and 400 templates. He doesn't like modifying his makefiles. He's trying to work like this: cxx -c 1.cxx cxx -c 2.cxx cxx ... cxx -c 800.cxx cxx -Hf 1.o 2.o ... 800.o Now the customer wants to know, if this problem will be fixed in the final version. Fran�ois [Posted by WWW Notes gateway] | |||||
| 3565.3 | status | DECCXX::MITCHELL | Thu May 15 1997 10:32 | 1 | |
This needs more investigation. We're looking at it. | |||||
| 3565.4 | Please use workaround in .1 for now | DECCXX::MITCHELL | Mon May 19 1997 15:38 | 2 | |
This problem also occurred with DEC C++ releases prior to V5.6. The problem has been fixed in V6.0. | |||||