tags:

views:

20

answers:

0

I am converting a large application to compile with lsbc++. I do not aim for full LSB compliance, I just want it to work with all but one of the LSB4.0 distributions (the remaining distribution is RHEL3 and lacks 100s of interfaces I use). The current situation is that I am missing one symbol in one library (of about 40 libraries/executables comprising the application), though it is present in a large number of distributions.

The problematic shared library is built with qmake using the linux-lsb-g++ configuration. Substantially the same build-process results in a (sufficiently) compliant executable implementing another (smaller) part of the application. I am fairly sure that all libraries statically linked into the so are also used elsewhere in the application, and do not cause any problems there. I have tried rebuilding everything from scratch, and have double checked that lsbc++ is being used for both compilation and linking.

The missing symbol is

std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_M_set_length_and_sharable(unsigned int) @GLIBCXX_3.4.5

It is apparently defined in file /opt/lsb/include/c++/bits in template class basic_string. I am using a 32-bit machine, so unsigned is a reasonable type for size.

What might I be doing wrong please (other than using std::string in a Qt application :-) )? Is there an obvious place to look? Many thanks.