[MacPorts] #41588: Boost.Regex with GCC broken on Mavericks?

MacPorts noreply at macports.org
Thu Nov 28 20:38:58 PST 2013


#41588: Boost.Regex with GCC broken on Mavericks?
------------------------------+--------------------------------
  Reporter:  akim.demaille@…  |      Owner:  macports-tickets@…
      Type:  defect           |     Status:  closed
  Priority:  Normal           |  Milestone:
 Component:  ports            |    Version:  2.2.1
Resolution:  invalid          |   Keywords:
      Port:  boost            |
------------------------------+--------------------------------
Changes (by ryandesign@…):

 * cc: ryandesign@… (added)
 * status:  new => closed
 * resolution:   => invalid


Old description:

> Hi,
>
> First of all, this seems to be strongly related to this ticket:
> http://trac.macports.org/ticket/38984.
>
> On Mavericks (with a fresh install of MacPorts, not a plain upgrade), I
> have the following behavior which turns out to be very alike the one I
> had reported in the aforementioned ticket, except that this time GCC is
> broken, but Clang is not:
>
> {{{
> akim at padam /tmp $ port installed | grep gcc
>   gcc43 @4.3.6_9 (active)
>   gcc44 @4.4.7_8 (active)
>   gcc45 @4.5.4_9 (active)
>   gcc46 @4.6.4_3 (active)
>   gcc47 @4.7.3_3 (active)
>   gcc48 @4.8.2_0 (active)
>   gcc49 @4.9-20131117_0
>   gcc49 @4.9-20131124_0 (active)
>   gcc_select @0.1_8 (active)
>   libgcc-devel @4.9-20131117_0
>   libgcc-devel @4.9-20131124_0 (active)
>   libgcc45 @4.5.4_9 (active)
> akim at padam /tmp $ cat foo.cc
> #include <boost/regex.hpp>
>
> int
> main ()
> {
>   boost::regex exp("*");
>   boost::regex_match("foo", exp);
>   return 0;
> }
> akim at padam /tmp $ g++-mp-4.8 foo.cc -L /opt/local/lib -I
> /opt/local/include -lboost_regex-mt
> Undefined symbols for architecture x86_64:
>   "boost::re_detail::perl_matcher<char const*,
> 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)", referenced from:
>       boost::re_detail::perl_matcher<char const*,
> std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char,
> boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*,
> boost::match_results<char const*, 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*) in ccaSC2nT.o
>   "boost::re_detail::perl_matcher<char const*,
> std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char,
> boost::cpp_regex_traits<char> > >::match()", referenced from:
>       bool boost::regex_match<char const*,
> 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*,
> 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) in ccaSC2nT.o
> ld: symbol(s) not found for architecture x86_64
> collect2: error: ld returned 1 exit status
> akim at padam /tmp $ clang++ foo.cc -L /opt/local/lib -I /opt/local/include
> -lboost_regex-mt
> akim at padam /tmp $
> }}}

New description:

 Hi,

 First of all, this seems to be strongly related to this ticket: #38984.

 On Mavericks (with a fresh install of MacPorts, not a plain upgrade), I
 have the following behavior which turns out to be very alike the one I had
 reported in the aforementioned ticket, except that this time GCC is
 broken, but Clang is not:

 {{{
 akim at padam /tmp $ port installed | grep gcc
   gcc43 @4.3.6_9 (active)
   gcc44 @4.4.7_8 (active)
   gcc45 @4.5.4_9 (active)
   gcc46 @4.6.4_3 (active)
   gcc47 @4.7.3_3 (active)
   gcc48 @4.8.2_0 (active)
   gcc49 @4.9-20131117_0
   gcc49 @4.9-20131124_0 (active)
   gcc_select @0.1_8 (active)
   libgcc-devel @4.9-20131117_0
   libgcc-devel @4.9-20131124_0 (active)
   libgcc45 @4.5.4_9 (active)
 akim at padam /tmp $ cat foo.cc
 #include <boost/regex.hpp>

 int
 main ()
 {
   boost::regex exp("*");
   boost::regex_match("foo", exp);
   return 0;
 }
 akim at padam /tmp $ g++-mp-4.8 foo.cc -L /opt/local/lib -I
 /opt/local/include -lboost_regex-mt
 Undefined symbols for architecture x86_64:
   "boost::re_detail::perl_matcher<char const*,
 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)", referenced from:
       boost::re_detail::perl_matcher<char const*,
 std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char,
 boost::cpp_regex_traits<char> > >::perl_matcher(char const*, char const*,
 boost::match_results<char const*, 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*) in ccaSC2nT.o
   "boost::re_detail::perl_matcher<char const*,
 std::allocator<boost::sub_match<char const*> >, boost::regex_traits<char,
 boost::cpp_regex_traits<char> > >::match()", referenced from:
       bool boost::regex_match<char const*,
 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*,
 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) in ccaSC2nT.o
 ld: symbol(s) not found for architecture x86_64
 collect2: error: ld returned 1 exit status
 akim at padam /tmp $ clang++ foo.cc -L /opt/local/lib -I /opt/local/include
 -lboost_regex-mt
 akim at padam /tmp $
 }}}

--

Comment:

 You cannot mix C++ software compiled with libstdc++ (i.e. anything
 compiled with FSF GCC, i.e. your foo.cc) with C++ software compiled with
 libc++ (i.e. boost and most other ports compiled using clang, llvm-gcc, or
 Apple GCC on Mavericks or later). Compile your foo.cc with clang instead
 of FSF GCC.

-- 
Ticket URL: <https://trac.macports.org/ticket/41588#comment:1>
MacPorts <http://www.macports.org/>
Ports system for OS X


More information about the macports-tickets mailing list