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