David Abrahams wrote:
goochrules!
writes: On Mon, 23 Aug 2004 23:32:14 +0200, Nicholas Cain
wrote: I saw yours and Davids posts, and thought it looked the same, but then I realised yours was std::allocator< ... etc, while mine is _STL::allocator<... . I find that when I use the normal std everything works, but not when I try to use STLPort, so I'm confident I'm linking to the libraries, but they don't contain_STL::allocatorboost::function_base I don't know if this is a problem in the way I built boost or STLPort, or with my makefile or environment.
thanks for noticing though!
nik
I've seen this exact problem on Windows, in various forms: basically one of a) the application I was working on or b) boost was not linked against STLPort, but with the STL included with the compiler.
To confirm this I looked at the dependencies of my project and the boost libraries (depends.exe on Windows, "otool -L" on OS X, otherwise "nm -j a.out | c++filt -_" and "nm -j a.out | c++filt-n" have been helpful.
To solve this I specifically added the path the the STLPort includes (.h) first in the extra includes list (CFLAGS) and the path to the STLPort libraries (.[dll|dylib|so|a]) first in the extra libaries list (LDFLAGS).
When you build the Boost libraries for use with STLPort, pass the -d+2 option so you can see the command lines bjam issues. Make sure you replicate the STLPort-related -D options when compiling your own code. In particular, one of those options has an impact on what namespace the standard library ends up in.
The most reliable way, of course, is to use Boost.Build to build your own project and reference the Boost project libraries. That will always make sure the options are compatible.
The only -D options I saw were -DBOOST_THREAD_BUILD_DLL=1 and -D_STLP_USE_DYNAMIC_LIB=1 - aren't they for windows compilers only though? Anyway, I tried rearranging path orders on my makefile, and adding in the -Ds, but no luck still. I'm pretty much a beginner to makefiles, so whether I learn make or boost::build involves some investing some time either way, and I might as well do the boost::build way. Give me a few days and hopefully I'll get there. But I'd like to know I'm not wasting my time here - sticking in a using namespace _STL into the boost::threads example (see my earlier post) on linux *should* work, shouldn't it? nik