[reSIProcate] Solaris status (libCstd or stlport?)

Adam Roach adam at nostrum.com
Mon Apr 23 15:15:30 CDT 2012


On 4/20/12 3:50 PM, Daniel Pocock wrote:
>
>
> I notice that reSIProcate has previously been compiled on Solaris using
> -library=stlport, and I believe this is still necessary or the code
> doesn't compile.  Without -library=stlport, it stops like this:
>
> libtool: compile:  /opt/SUNWspro/bin/CC -DHAVE_CONFIG_H -I. -I..
> -I/opt/csw/bdb48/include -I/opt/csw/include -xO3 -m32 -xarch=sparc
> -DRESIP_OSTYPE_SUNOS -DRESIP_ARCH_SPARC -DRESIP_LARCH_SPARC -D_REENTRANT
> -DRESIP_TOOLCHAIN_SUNPRO -c DnsUtil.cxx  -KPIC -DPIC -o .libs/DnsUtil.o
> "DnsUtil.cxx", line 550: Error: Formal argument x of type const
> std::pair<resip::Data, resip::Data>&  in call to
> std::list<std::pair<resip::Data, resip::Data>  >::push_back(const
> std::pair<resip::Data, resip::Data>&) is being passed std::pair<char*,
> resip::Data>.
> 1 Error(s) detected.
>
>
> However, I noticed that dependenices (e.g.
> /opt/csw/bdb48/lib/libdb_cxx-4.8.so) are linked against libCstd
>
> If I add -library=stlport, the code builds, but the repro binary fails
> with a Segmentation fault, before it even enters the main function.  The
> stack trace shows a combination of libCstd and stlport classes.
>
> Can anyone comment on how to deal with this situation?  Should libCstd
> be supported?
>

Okay, after studying the error message, this looks like a bug in libCstd 
under Solaris. For some reason, it's failing to perform an implicit 
conversion from "std::pair<char*,resip::Data>" to "const 
std::pair<resip::Data,resip::Data>&".

There are three places this could be going wrong. The two that seem 
least likely is the implicit conversion from non-const to const, and the 
conversion to a reference (if it had an issue with the pair being 
temporary, I would expect the error to mention as much -- beyond which 
I'm pretty certain push_back's contract is one of copying, in which case 
a temporary causes no issue). The third thing that might go wrong -- and 
the one I suspect -- is conversion from char* to resip::Data (which has 
a perfectly good implicit constructor of the form "Data(const char* str);").

I don't have a working Solaris VM at the moment, but I would suggest 
changing the line to read:


          results.push_back(std::pair<Data,Data>(*_name, ip));


...and see if that eliminates the error with libCstd.

Also: how pervasive is this issue? If you do a "make -i," how many such 
errors arise over the course of compilation?

/a



More information about the resiprocate-devel mailing list