Boost logo

Boost-Build :

Subject: Re: [Boost-build] msvc: shared objects and static libs problem
From: Karsten Ahnert (karsten.ahnert_at_[hidden])
Date: 2012-01-30 05:34:23


Ok, thank you! That solved the problem. I only had to use _WIN32 in #ifdef.

There is also a boost preprocessor symbol for this declaration:
BOOST_SYMBOL_EXPORT.

On 01/30/2012 10:31 AM, Jaros³aw Bober wrote:
> Ahh sorry I didn't looked at your project before and assumed that you
> have problem with boost itself. Yes, those flags are only for boost libs.
>
> What you're trying to do is to make shared libs (this is the default
> behaviour of boost-build), in linux it works out of the box.
> In Windows however you have to declare export symbols with something
> like this:
>
> __declspec(dllexport) void tree_func( int a );
>
> To support multiplatform you can do something like this:
>
> #ifdef WIN32
> #define EXPORTED __declspec(dllexport)
> #else
> #define EXPORTED
> #endif
>
> and then have your declaration:
>
> EXPORTED void tree_func( int a );
>
> Regards
>
> 2012/1/30 Karsten Ahnert <karsten.ahnert_at_[hidden]
> <mailto:karsten.ahnert_at_[hidden]>>
>
> Ok, I also tried this. It does not work. I thought that
> BOOST_ALL_NO_LIBS is only for the boost libraries (filesystem,
> program_option, etc..).
>
> Am 30.01.2012 09:43, schrieb Jaros³aw Bober:
>> The flag I was talking about is BOOST_ALL_NO_LIB not
>> BOOST_ALL_NO_LIBS.
>> You are right that this flags controll automatic linking. So when
>> you do it manually, you're linking to shared libraries (unless
>> you're directly linking to static version).
>> But automatic linking wants static if you haven't declared
>> BOOST_ALL_DYN_LINK somewhere.
>> I had the same problem. Try this in jamroot:
>>
>> project :
>> requirements
>> <define>BOOST_ALL_NO_LIB
>> ;
>>
>> Hope this helps.
>>
>> 2012/1/30 Karsten Ahnert <karsten.ahnert_at_[hidden]
>> <mailto:karsten.ahnert_at_[hidden]>>
>>
>> I defined BOOST_ALL_NO_LIBS=1, but the problem is still the
>> same. I think BOOST_ALL_NO_LIBS controlls automatic linking of
>> the boost libraries. Any other ideas?
>>
>> Am 30.01.2012 09:05, schrieb Jaros³aw Bober:
>>> >From first sight it looks like you have automatic linking
>>> turned on. This thing works only on windows, that's why
>>> you're fine on linux.
>>> Perhaps you should turn this off by defining flag
>>> BOOST_ALL_NO_LIB.
>>>
>>> Regards
>>>
>>> 2012/1/28 Dr. Karsten Ahnert <karsten.ahnert_at_[hidden]
>>> <mailto:karsten.ahnert_at_[hidden]>>
>>>
>>> Hi,
>>>
>>> I have a a project with several dynamic libraries and
>>> some applications. Some of these libraries depend on
>>> other libraries.
>>>
>>> In the Jamroot I created aliases to all libraries and in
>>> the Jamfiles for the single library I include all depend
>>> libraries via these aliases. This works fine on linux
>>> (boost 1.48) but does not work on Windows machines. The
>>> problem is that bjam tries to find the static versions of
>>> the depended libraries which have not been build:
>>>
>>> LINK : fatal error LNK1181: cannot open input file '*.lib'
>>>
>>> I attached a small self contained example. Any ideas how
>>> I can fix this?
>>>
>>> Thank you,
>>>
>>> Karsten


Boost-Build list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk