Boost logo

Boost Users :

From: Michele Bini (mikbini_at_[hidden])
Date: 2008-01-28 19:32:14


Hello,

I'm building boost 1.34.1 on linux (with redhat 9 gcc 3.2.2-5) with
STLport 5.0 and ICU. This is the bjam invocation:

bjam -q -j4 --toolset=gcc \
  --build-dir=~/boost/build \
  --stagedir=~/boost/stage --prefix=~/build-gecko \
  -sNO_BZIP2=1 \
  -sSTLPORT_VERSION=5 -sSTLPORT_5_PATH=~/build-gecko/lib \
  -sSTLPORT_INCLUDE_DIRECTORY=../include/stlport \
  -sSTLPORT_LIB_DIRECTORY=. \
  -sHAVE_ICU=1 -sICU_PATH=~/build-gecko \
  --without-python \
  runtime-link=shared variant=release \
  instruction-set=i686 threading=multi stage install

This simple example:

#include <iterator>
#include <boost/regex.hpp>
#include <iostream>

int main(int argc, const char** argv)
{
     std::string xml_str = "<?xml version=\"1.0\"?><test/>\n";

     boost::regex e1("<\\?xml version=\"[^\"]+\"\\?>",
                     boost::regex::extended);
     std::string sanitized_xml =
         boost::regex_replace(
             xml_str, e1, "",
             boost::regex_constants::match_default
                 | boost::regex_constants::format_literal);
     return 0;
}

compiles ok with

c++ -c -o ./test.o -mcpu=pentiumpro -march=pentiumpro -pipe -O2 \
   -g3 -pthread -fforce-addr -fstrict-aliasing -Wall -W -Wcast-align \
   -Wconversion -Wpointer-arith -Wsign-compare -Wwrite-strings \
   -ftemplate-depth-48 -fno-dollars-in-identifiers -fno-operator-names \
   -ffor-scope -Wctor-dtor-privacy -Wnon-virtual-dtor \
   -Woverloaded-virtual -Wsign-promo -Wsynth -D__linux__ \
   -D__OSVERSION__=2 -D__LITTLE_ENDIAN__ -D_REENTRANT -D_GNU_SOURCE \
   -DHAVE_CONFIG_H=1 -DDEBUG -DFATAL_ASSERTS -DXP_UNIX \
   -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 \
   -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -DNO_GCC_PRAGMA \
   -I${HOME}/build-gecko/include/stlport \
   -I${HOME}/build-gecko/include \
   -I${HOME}/build-gecko/include/boost-1_34_1 \
   ./test.cc
# Yes, I know the command line is longer than the example

but fails when linking with

c++ -pthread -Wl,-rpath-link,${HOME}/build-gecko/lib \
   -o ./test ./test.o \
   ~/build-gecko/lib/libboost_regex-gcc32-mt-1_34_1.so \
   ~/build-gecko/lib/libicuuc.so \
   ~/build-gecko/lib/libicui18n.so \
   ~/build-gecko/lib/libicudata.so \
   ~/build-gecko/lib/libstlport.so

The full linker error is:

test.o(.gnu.linkonce.t._ZN5boost12regex_searchIPKcN8stlp_std9allocatorINS_9sub_matchIS2_EEEEcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEbT_SC_RNS_13match_resultsISC_T0_EERKNS_11basic_regexIT1_T2_EENS_15regex_constants12_match_flagsESC_+0x9d):
In function `bool boost::regex_search<char const*,
stlp_std::allocator<boost::sub_match<char const*> >, char,
boost::regex_traits<char, boost::cpp_regex_traits<char> > >(char const*,
char const*, boost::match_results<char const*,
stlp_std::allocator<boost::sub_match<char const*> > >&,
boost::basic_regex<char, boost::regex_traits<char,
boost::cpp_regex_traits<char> > > const&,
boost::regex_constants::_match_flags, char const*)':
/home/nas/michele/build-gecko/include/stlport/stl/_alloc.c:273:
undefined reference to `boost::re_detail::perl_matcher<char const*,
stlp_std::allocator<boost::sub_match<char const*> >,
boost::regex_traits<char, boost::cpp_regex_traits<char> >
>::construct_init(boost::basic_regex<char, boost::regex_traits<char,
boost::cpp_regex_traits<char> > > const&,
boost::regex_constants::_match_flags)'
test.o(.gnu.linkonce.t._ZN5boost9re_detail12perl_matcherIPKcN8stlp_std9allocatorINS_9sub_matchIS3_EEEENS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE11match_matchEv+0xd4):
In function `boost::re_detail::perl_matcher<char const*,
stlp_std::allocator<boost::sub_match<char const*> >,
boost::regex_traits<char, boost::cpp_regex_traits<char> > >::match_match()':
/home/nas/michele/build-gecko/include/boost-1_34_1/boost/regex/v4/regex_iterator.hpp:48:
undefined reference to `boost::match_results<char const*,
stlp_std::allocator<boost::sub_match<char const*> >
>::maybe_assign(boost::match_results<char const*,
stlp_std::allocator<boost::sub_match<char const*> > > const&)'
test.o(.gnu.linkonce.t._ZN5boost9re_detail11raise_errorINS_20regex_traits_wrapperINS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEEEEEvRKT_NS_15regex_constants10error_typeE+0x9a):
In function `void
boost::re_detail::raise_error<boost::regex_traits_wrapper<boost::regex_traits<char,
boost::cpp_regex_traits<char> > >
>(boost::regex_traits_wrapper<boost::regex_traits<char,
boost::cpp_regex_traits<char> > > const&,
boost::regex_constants::error_type)':
/home/nas/michele/build-gecko/include/boost-1_34_1/boost/regex/v4/perl_matcher_common.hpp:861:
undefined reference to
`boost::re_detail::raise_runtime_error(stlp_std::runtime_error const&)'
collect2: ld returned 1 exit status

I googled a bit and found this:

http://lists.boost.org/boost-users/2006/02/17394.php

but there was no follow up. Is there some mistake in my example? Does
somebody have any suggestions or workarounds? I know that gcc 3.2.2 is
quite old but I have used it for many years and always convinced it to
do its work (and no, I cannot easily switch to a newer compiler).

Any help will be really appreciated; cheers,
Michele


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