Boost logo

Boost Users :

Subject: [Boost-users] Statically linking libstdc++.so.6 and boost
From: Michael Dehmlow (dehmlowm_at_[hidden])
Date: 2009-05-08 12:32:47


I have a rather interesting situation and I'm wondering if any one has some
ideas.
I am building a linux shared library which uses boost and xerces, I have an
application which I compile and run fine using gcc 4.1 which uses
stdlibc++.so.6.

I also have a requirement to create an interface for Labview 8.6 which is
built using gcc 3.3
which uses stdlibc++.so.5.

After some investigation I found that Labview would crash on any std::string
concatenation because it was dynamically using the old stdlib(5). In a
simplified test tool I statically linked the stdc++ lib using this really
great page:
http://www.trilithium.com/johan/2005/06/static-libstdc/
Everything worked great until I started adding my cots (boost and xerces)
into the mix. For xerces I simply modified the xerces make file to
statically link stdlib and (using gdb was able determine that) I get past
all my xerces calls.

However when I make call to boost lexical cast it still tries to use the
dynamic std library 5:
#0 0x00cab1a7 in std::string::data () from /usr/lib/libstdc++.so.5
#1 0x0362b479 in boost::detail::lexical_cast<int, std::string, false, char>
(arg=@0x0, buf=0x0, src_len=0)
    at /usr/include/boost/boost_1_38_0/boost/lexical_cast.hpp:1149
#2 0x0362b500 in boost::detail::lexical_cast<int, std::string, false, char>
(arg=Cannot access memory at address 0x8
) at /usr/include/boost/boost_1_38_0/boost/lexical_cast.hpp:1159

Above is the stack trace immediately preceding my segmentation fault.

One: I thought that lexical cast was built into hpp files and was compiled
at my application compile time is that correct?

Two: does any one know how to make the symbols from a .a (static library)
file look in the encapsulating so's symbol table before the applications
symbol table? Or can anyone point me at some information on symbol lookup
precedence.

Three: I'm considering including all of the generated object files from the
included boost .a files in my make file rather than including the
staticboost libraries themselves. Seem like a good idea? Any pitfalls?

Four: any other Ideas?

Below is the meat of my make file:

g++ -g -static-libgcc -nodefaultlibs -fPIC -shared -fno-gnu-linker
-Wl,-soname,libEXPO.so -o libEXPO.so ${APIOBJECTS} ${DETAILOBJECTS}
${OBJECTS} -L. -L../../../utl/CommonObjects/XML/
-L../../../utl/CommonObjects/Exceptions
${COTS_EXPO_BOOST_LIBDIR_38}/libboost_thread-gcc41-mt-1_38.a
${COTS_EXPO_BOOST_LIBDIR_38}/libboost_filesystem-gcc41-mt-1_38.a
${COTS_EXPO_BOOST_LIBDIR_38}/libboost_system-gcc41-mt-1_38.a
${COTS_EXPO_BOOST_LIBDIR_38}/libboost_regex-gcc41-mt-1_38.a
${COTS_EXPO_BOOST_LIBDIR_38}/libboost_date_time-gcc41-mt-1_38.a
./libxerces-c.so.26 -lXML -lExceptions -lc /lib/libpthread.so.

-- 
View this message in context: http://www.nabble.com/Statically-linking-libstdc%2B%2B.so.6-and-boost-tp23449291p23449291.html
Sent from the Boost - Users mailing list archive at Nabble.com.

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net