As commented on
https://svn.apache.org/repos/asf/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp's
<https://svn.apache.org/repos/asf/incubator/tuscany/cpp/sdo/runtime/core/src/commonj/sdo/RefCountingPointer.cpp%27s>code
(shown below), when compiled on windows, the template overridden
methods does not get generated if they are not used. Though, I did the same
on DAS. It works fine on windows, but when I compiled on linux I got some
link errors. So I removed the "#if defined(WIN32) || defined (_WINDOWS)"
direct and most of these errors were gone, except:
Error:
linux-ilqh:/home/adriano/files/tuscany/das # ant test
Buildfile: build.xml
test:
all:
check.sdo:
build:
[cc] Starting dependency analysis for 1 files.
[cc] 0 files are up to date.
[cc] 1 files to be recompiled from dependency analysis.
[cc] 1 total files to be compiled.
[cc] Starting link
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::Command>::RefCountingObject()'
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::rdb::ResultSet>::RefCountingObject()'
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::rdb::Statement>::RefCountingObject()'
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::rdb::Statement>::~RefCountingObject()'
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::Command>::~RefCountingObject()'
[cc] /home/adriano/files/tuscany/das/deploy/lib/libtuscany_das.so:
undefined reference to
`apache::das::RefCountingObject<apache::das::rdb::ResultSet>::~RefCountingObject()'
[cc] collect2: ld returned 1 exit status
BUILD FAILED
/home/adriano/files/tuscany/das/build.xml:116: The following error occurred
while executing this line:
/home/adriano/files/tuscany/das/runtime/test/build.xml:39: The following
error occurred while executing this line:
/home/adriano/files/tuscany/das/runtime/test/build.xml:49: The following
error occurred while executing this line:
/home/adriano/files/tuscany/das/antscripts/compile-targets.xml:107: gcc
failed with return code 1
SDO code:
// officially, there is nothing here- but if I dont use the overrides in
// the templates, then they dont get generated.
void Test ()
{
#if defined(WIN32) || defined (_WINDOWS)
/* 1) construct */
DataFactoryPtr fptr = DataFactory::getDataFactory();
/* 2) use the & operator= */
fptr = DataFactory::getDataFactory();
/* 3) copy */
DataFactoryPtr fptr2 = fptr;
/* 4) use the == and ! */
if (fptr2 == fptr || !fptr){}
/* 5) Use the T* and * */
DataFactory* dmsf = getRawPointer(fptr);
DataFactory& dmsr = *fptr;
/* 1) construct */
DataFactoryPtr dfptr(fptr);
/* 3) copy */
DataFactoryPtr dfptr2 = dfptr;
/* 2) use the & operator= */
dfptr = dfptr2;
/* 4) use the == and ! */
if (dfptr2 == dfptr || !dfptr){}
/* 5) Use the T* and * */
DataFactory* ddmsf = getRawPointer(dfptr);
DataFactory& ddmsr = *dfptr;
/* 6) Use the -> */
DataObjectPtr dptr = dfptr->create("nothing","nowhere");
/* and agin to catch the = */
dptr = fptr->create("nothing","nowhere");
DataObjectPtr dptr2 = dptr;
/* Use the T* and * */
DataObject* dof = getRawPointer(dptr);
DataObject& dor = *dptr;
if (dptr2 == dptr || !dptr){}
ChangeSummaryPtr cptr = dptr->getChangeSummary();
cptr = dptr->getChangeSummary();
ChangeSummaryPtr cptr2 = cptr;
ChangeSummary* cof = getRawPointer(cptr);
ChangeSummary& cop = *cptr;
if (cptr2 == cptr || !cptr){}
cptr->endLogging();
SequencePtr sptr = dptr->getSequence();
sptr = dptr->getSequence();
SequencePtr sptr2 = sptr;
Sequence* sof = getRawPointer(sptr);
Sequence& sop = *sptr;
if (sptr2 == sptr || !sptr){}
sptr->getBooleanValue(0);
// Generate code for XMLDocumentPtr
XMLDocumentPtr xmldocptr1 = 0;
XMLDocumentPtr xmldocptr2 = xmldocptr1;
xmldocptr1 = xmldocptr2;
if (xmldocptr2 == xmldocptr1 || !xmldocptr1){}
XMLDocument* xmldocp = getRawPointer(xmldocptr1);
XMLDocument& xmldocref = *xmldocptr2;
xmldocptr1->getEncoding();
// Generate code for XSDHelperPtr
XSDHelperPtr xsdhptr1 = 0;
XSDHelperPtr xsdhptr2 = xsdhptr1;
xsdhptr1 = xsdhptr2;
if (xsdhptr2 == xsdhptr1 || !xsdhptr1){}
XSDHelper* xsdhp = getRawPointer(xsdhptr1);
XSDHelper& xsdhref = *xsdhptr2;
xsdhptr1->define("dummy");
// Generate code for XMLHelperPtr
XMLHelperPtr xmlhptr1 = 0;
XMLHelperPtr xmlhptr2 = xmlhptr1;
xmlhptr1 = xmlhptr2;
if (xmlhptr2 == xmlhptr1 || !xmlhptr1){}
XMLHelper* xmlhp = getRawPointer(xmlhptr1);
XMLHelper& xmlhref = *xmlhptr2;
xmlhptr1->load("dummy");
// Generate code for DataGraphPtr
DataGraphPtr dgptr1 = 0;
DataGraphPtr dgptr2 = dgptr1;
dgptr1 = dgptr2;
if (dgptr2 == dgptr1 || !dgptr1){}
DataGraph* dghp = getRawPointer(dgptr1);
DataGraph& dgref = *dgptr2;
dgptr1->getRootObject();
#endif
Does anybody know how to solve this problem? I`m using these constructors
and destructors, so they should be generated as were the others overridden
template methods.
Thanks,
Adriano Crestani