Boost logo

Boost Users :

From: Jason Ivey (jasonivey_at_[hidden])
Date: 2007-08-15 15:53:20


A couple of other hints...

I was compiling this test application for debug mode and ran into the linker
error. When I compiled and linked the application in release mode it worked
without any problems at all.

When I tried forcing the application to link against the library I renamed
it came back with a long list of unresolved externals pointing towards
objects in the "stlpx_std" namespace. I found that this namespace is
getting defined in debug mode when the symbol
_STLP_USING_CROSS_NATIVE_RUNTIME_LIB is set in
stlport/stl/config/features.h. Then the auto linking is forcing to link
against the library, stlportstld_x.5.1.lib, mentioned in my last message in
the file stlport/stl/config/_auto_link.h again because of the symbol
_STLP_USING_CROSS_NATIVE_RUNTIME_LIB is defined. The symbol looks to be
initially defined in the file stlport/stl/config/_detect_dll_or_lib.h.

My question now is why when I compile STLPort is this symbol not defined,
but later when I compile Boost specifying stdlib=stlport does it end up
defining this symbol?

Thanks again,

Jason

"Jason Ivey" <jasonivey_at_[hidden]> wrote in message news:<
16ad90d0708151029y2c4b0bdch53c4245cbd569b6a_at_[hidden]>...
> I am attempting to compile and link a small test application using
> STLPort_5.1.3, boost_1_34_1 and MSVC8 sp1. Everything works fine when I
> don't have to link against any boost libraries. To test linking against
the
> boost static libraries I wrote a simple little test app that used the
> boost::regex library and ran into errors. I am not completely sure that
> this is a boost issue but since I can compile and link programs without
any
> problems that don't use boost binaries I wasn't sure of who else to turn
> to. The linker error I am getting is:
>
> 1>LINK : fatal error LNK1104: cannot open file 'stlportstld_x.5.1.lib'
>
> The problem is that all of the stlport libraries are named
> stlportstld.5.1.lib or similar. I did try to just rename the library to
> make it match but, of course, I got a boat load of unresolved external
> linker errors pointing to names such as "stlpdx_std::basic_string."
Looking
> at a dumpbin output of the actual regex library it is linking against,
> libboost_regex-vc80-mt-sgdp-1_34_1.lib, I found linker directives of the
> form:
>
> /DEFAULTLIB:"stlportstld_x.5.1.lib"
> /DEFAULTLIB:"libcpmtd"
> /DEFAULTLIB:"LIBCMTD"
> /DEFAULTLIB:"OLDNAMES"
>
> I couldn't find anywhere that boost had put those directives in the
> libraries but I could be missing something so I also did a dumpbin of one
of
> the stlport libraries, stlportd_static.5.1.lib, and only found the
following
> linker directives:
>
> /DEFAULTLIB:"LIBCMTD"
> /DEFAULTLIB:"OLDNAMES"
>
> I have to believe there are at least a few companies out there who have
> replaced the shipping MSVC STL for testing purposes, if for no other
reason,
> and are also using Boost so hopefully I'm just missing something obvious.
> Below are the steps I followed to compile both sets of libraries and the
> test application. Let me know if anything appears to be off or if there
is
> simply a better/easier way.
>
> Thanks,
>
> Jason Ivey
>
>
> Open command prompt and run:
> "%VS80COMNTOOLS%\vsvars32.bat"
>
> STLPort_5.1.3
> build\lib\configure -c msvc8
> nmake /fmsvc.mak install
>
> Boost_1_34_1
> edit tools\build\v2\user-config.jam
> added line 45 with
> using stlport : : d:\\build\\stlport\\stlport d:\\build\\stlport\\lib
;
> bjam --toolset=msvc stdlib=stlport --with-regex stage
>
> Build Test Application
> set include=d:\build\stlport\stlport;D:\build\boost_1_34_1;%include%
> set lib=d:\build\stlport\lib;D:\build\boost_1_34_1\stage\lib;%lib%
> call "%VS80COMNTOOLS%\..\IDE\devenv.exe" /useenv
>



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