|
Boost : |
From: John Maddock (john_at_[hidden])
Date: 2005-08-20 07:36:31
> After upgrading to Boost 1.33.0 I found a problem with my code when
> built for Intel 8.0 on Linux. The problem doesn't show up with g++. I
> reduced it to a simple test case. With Intel 8.0 it compiles but fails
> to link the executable, complaining that it can't find the 'position'
> and 'str' functions. Note that it does find the 'length' function.
> Intel(R) C++ Compiler for 32-bit applications, Version 8.0 Build
> 20040304Z Package ID: l_cc_pc_8.0.058_pe061
> Copyright (C) 1985-2004 Intel Corporation. All rights reserved.
I can't reproduce that with Package 8.1.026 (unfortunately you can't install
both 8.0 and 8.1 at the same time, so I wasn't able to test with 8.0).
I have a suspicion that what's happening is this:
The match_results<const char*> template instance is explicitly instantiated
in the library, and declared as "extern" in user code (so it uses the
instance in the library). I suspect that your code is being built with
inline expansions off, but the release version of the lib doesn't have these
inline members instantiated in it, so either:
1) Try linking to the debug build of the lib when building with inline
expansion turned off.
2) uncomment the line // #define BOOST_REGEX_NO_EXTERNAL_TEMPLATES in
boost/regex/user.hpp and rebuild everything, the regex lib will now be
slightly smaller, and your exe will be a lot bigger, but it should cure the
problem.
3) Upgrade to Intel 8.1, I realise this might not be possible though.
HTH, John.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk