When trying to compile Qbox with xerces 3.0.1 I ran into a few errors.
One was : WavefunctionHandler.C:415: error: invalid conversion from ‘XMLByte**’ to ‘char**’ - easily fixed by editing that line to read 'XMLString::release((char**)&b);'
the second which I am not so sure about is:
WavefunctionHandler.C: In member function ‘virtual void WavefunctionHandler::endElement(const XMLCh*, const XMLCh*, const XMLCh*, std::string&)’:
WavefunctionHandler.C:407: error: no matching function for call to ‘xercesc_3_0::Base64::decode(XMLByte*, unsigned int*)’
/home/defarr/Qbox/xerces-c-3.0.1/include/xercesc/util/Base64.hpp:102: note: candidates are: static XMLByte* xercesc_3_0::Base64::decode(const XMLByte*, XMLSize_t*, xercesc_3_0::MemoryManager*, xercesc_3_0::Base64::Conformance)
/home/defarr/Qbox/xerces-c-3.0.1/include/xercesc/util/Base64.hpp:186: note: static XMLByte* xercesc_3_0::Base64::decode(const XMLByte*, XMLSize_t*, XMLByte*&, xercesc_3_0::MemoryManager*, xercesc_3_0::Base64::Conformance)
make: *** [WavefunctionHandler.o] Error 1
any thoughts?
Trouble with Xerces 3.0.1
Forum rules
You must be a registered user to post in this forum. Registered users may also post new topics if they consider that their subject do not correspond to any topic already present on the forum.
You must be a registered user to post in this forum. Registered users may also post new topics if they consider that their subject do not correspond to any topic already present on the forum.
-
- Posts: 6
- Joined: Sat Nov 22, 2008 12:29 am
Re: Trouble with Xerces 3.0.1
ok - found my problem is actually nested dependencies in the various libraries linked.
-
- Site Admin
- Posts: 167
- Joined: Tue Jun 17, 2008 7:03 pm
Re: Trouble with Xerces 3.0.1
Regarding the first problem: It is interesting that the Xerces API is somewhat inconsistent here. The Base64 class API says that Base64::decode allocates the returned XMLByte buffer and that it should be deallocated using an XMLString member (XMLString::release). In Xerces 2.8.0, XMLString::release(XMLByte** buf) exists, but it has disappeared in Xerces 3.0.1. However, since XMLByte is a typedef for unsigned char, I will assume it is legal to cast XMLByte** to char** which then allows one to use XMLString::release(char** buf), but this is a little weird.
I will schedule the change for inclusion in the next release.
Thanks.
I will schedule the change for inclusion in the next release.
Thanks.
-
- Site Admin
- Posts: 167
- Joined: Tue Jun 17, 2008 7:03 pm
Re: Trouble with Xerces 3.0.1
The error reported in the original post can be avoided by replacing WavefunctionHandler.C:407 by the following line:
The cast to (XMLSize_t*) is necessary to conform to the 3.0.1 API. However, this makes the code incompatible with Xerces 2.8.0.
This may be a good time to migrate Qbox to Xerces-C 3.0.1, but there is still a fair number of platforms on which we haven't built 3.0.1.
There is at least one platform (TACC Ranger) on which 2.8.0 does not build with g++ 3.4.6, and migration to Xerces 3.0.1 is necessary.
The probable course of action will be an #ifdef ...
Code: Select all
XMLByte* b = Base64::decode((XMLByte*) content.c_str(), (XMLSize_t*) &length);
This may be a good time to migrate Qbox to Xerces-C 3.0.1, but there is still a fair number of platforms on which we haven't built 3.0.1.
There is at least one platform (TACC Ranger) on which 2.8.0 does not build with g++ 3.4.6, and migration to Xerces 3.0.1 is necessary.
The probable course of action will be an #ifdef ...
-
- Posts: 5
- Joined: Wed Oct 15, 2008 7:33 pm
Re: Trouble with Xerces 3.0.1
Hi, any news on this front? as of version 1.52 I still can not use xerces 3. The library still reads negative values for zval and lmax which raise an exception while reading the 'species'.
-
- Site Admin
- Posts: 167
- Joined: Tue Jun 17, 2008 7:03 pm
Re: Trouble with Xerces 3.0.1
The problem seems to come from the following change in the Xerces-C 3 API (tested here with Xerces-C 3.1.1).
From the migration guide from 2.8.0 to 3.0.0 on page http://xerces.apache.org/xerces-c/migra ... fiedAPI300
argument in member function ::characters has changed from unsigned int to XMLSize_t.
This affects the following files:
StructuredDocumentHandler.h
StructuredDocumentHandler.C
You can fix it with the following:
Note the change of the test for XERCESC_3_0_1 in WavefunctionHandler.C to XERCESC_3, since the minor versions upgrades are likely not affecting the API.
The above fix was released in 1.52.3. See http://eslab.ucdavis.edu/software/qbox
Please post to this list if you find more Xerces-C 3 problems.
Thanks
From the migration guide from 2.8.0 to 3.0.0 on page http://xerces.apache.org/xerces-c/migra ... fiedAPI300
The type of some arguments of the members of SAX2 DefaultHandler have changed. In particular, the "length"Many public interfaces that used int/long types to represent memory-related sizes, counts, indexes, etc., have been modified to use the 64-bit safe XMLSize_t type instead
argument in member function ::characters has changed from unsigned int to XMLSize_t.
This affects the following files:
StructuredDocumentHandler.h
StructuredDocumentHandler.C
You can fix it with the following:
Code: Select all
===================================================================
--- StructuredDocumentHandler.C (revision 800)
+++ StructuredDocumentHandler.C (working copy)
@@ -61,7 +61,7 @@
////////////////////////////////////////////////////////////////////////////////
void StructuredDocumentHandler::characters(const XMLCh* const chars,
- const unsigned int length)
+ const XMLSize_t length)
{
#if TIMING
Timer tm;
===================================================================
--- StructuredDocumentHandler.h (revision 800)
+++ StructuredDocumentHandler.h (working copy)
@@ -61,7 +61,7 @@
void startElement(const XMLCh* const uri,const XMLCh* const localname,
const XMLCh* const qname, const Attributes& attributes);
- void characters(const XMLCh* const chars, const unsigned int length);
+ void characters(const XMLCh* const chars, const XMLSize_t length);
void endElement(const XMLCh* const uri, const XMLCh* const localname,
const XMLCh* const qname);
void ignorableWhitespace(const XMLCh* const chars,
===================================================================
--- WavefunctionHandler.C (revision 836)
+++ WavefunctionHandler.C (working copy)
@@ -405,7 +405,7 @@
{
// base64 encoding
unsigned int length;
-#ifdef XERCESC_3_0_1
+#ifdef XERCESC_3
XMLByte* b = Base64::decode((XMLByte*)content.c_str(),
(XMLSize_t*) &length);
#else
The above fix was released in 1.52.3. See http://eslab.ucdavis.edu/software/qbox
Please post to this list if you find more Xerces-C 3 problems.
Thanks