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

Reply via email to