Boost logo

Boost Users :

From: Mark Storer (MStorer_at_[hidden])
Date: 2004-06-23 12:32:15

I'm getting several compiler errors when trying to use the Spirit library.

When compiling one of the samples from the v1.6 documentation, I get a linker error:

SpiritTest.obj : fatal error LNK1179: invalid or corrupt file: duplicate comdat "?do_parse@?$parse_subrule_at_V?$match_at_Unil_t_at_spirit@boost@@@spirit_at_boost@@U?$subrules_scanner_at_V?$scanner_at_PBDU?$scanner_policies_at_U?$skipper_iteration_policy_at_Uiteration_policy_at_spirit@boost@@@spirit_at_boost@@Umatch_policy_at_23@Uaction_policy_at_23@@spirit_at_boos67ac75e0"

LNK1179 suggested that the /H _compiler_ option might be involved. It (supposedly) controls how long a symbol is allowed to be when the compiler is generating symbol names. I've tried several different variations on the /H option, /H512, /H1024, etc. They all give the same error message, and the symbol "?do_parse_at_..." doesn't get any longer (or shorter for that matter).

I also get a number compiler errors when I #include <boost/spirit.hpp>:

c:\sdks\boost-1.30.2\boost\spirit\utility\impl\chset\basic_chset.ipp(32) : error C2955: 'arg' : use of class template requires template argument list
        c:\sdks\boost-1.30.2\boost\bind\arg.hpp(26) : see declaration of 'arg'

----------basic_chset.ipp, lines 31-33
template <typename CharT>
inline basic_chset<CharT>::basic_chset(basic_chset const& arg)
: rr(arg.rr) {}

----------arg.hpp lines 24-26
template<int I> class arg

The boost/bind include is in the core/composite/actions. Trying to mess with the order of inclusion seems Fraught With Peril. The basic_chset template is in "utility", and everything in "utility" depends on various bits and pieces of "core". basic_chset is derived from unary, which is defined in core/composite. A Gordian knot... and me without a sword.

--Mark Storer
  Senior Software Engineer
  Verity, Inc.

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at