Boost logo

Boost-Build :

Subject: Re: [Boost-build] MSVC lib project only creates .dll but not .lib
From: Michael Jackson (mike.jackson_at_[hidden])
Date: 2008-12-11 08:17:20

If this is cross platform code then you are going to need a few things
to your code.
First add a header file to your project called MyProjectDllExport.h.
In that file do something like:

// Contents of DLLDefines.h
#ifndef _MyCommon_DLLDEFINES_H_
#define _MyCommon_DLLDEFINES_H_

/* Cmake will define MyLibrary_EXPORTS on Windows when it
configures to build a shared library. If you are going to use
another build system on windows or create the visual studio
projects by hand you need to define MyLibrary_EXPORTS when
building a DLL on windows.
// We are using the Visual Studio Compiler and building Shared libraries

#if defined (_WIN32)
   #if defined(MyCommon_EXPORTS)
     #define MYLIB_EXPORT __declspec(dllexport)
     #define MYLIB_EXPORT __declspec(dllimport)
   #endif /* MyCommon_EXPORTS */
#else /* defined (_WIN32) */
  #define MYLIB_EXPORT

#endif /* _MyCommon_DLLDEFINES_H_ */

In your jam file for the Common Library being compiled define

For the MyLibrary compilation make sure MyCommon_EXPORTS is NOT defined.

Repeat for the MyLibrary to MyGui compilation.

So for classes in MyCommon define them like this:

class MyCommon_EXPORTS MyCommonClass { };

static functions can be declared like this:

class MyStaticFunctionClass {
static MYLIB_EXPORT void MyExportedFunction(int i);
**This was take from the following web site:
   which while from a CMake site is applicable to _any_ cross platform

*** This is _not_ an endorsement of CMake or even a suggestion to use
CMake. Just a working example to use for your own bjam project.
Mike Jackson mike.jackson_at_[hidden]
BlueQuartz Software
Principal Software Engineer Dayton, Ohio

On Dec 11, 2008, at 7:12 AM, Christoph Mayer wrote:

> Hi,
> I have a project using the msvc toolset (VC8.0) under
> Windows XP. The project contains two lib and one exe project.
> The main jamfile looks as follows and lies in ./ :
> ----------<jamfile-begin>----------
> project MyProject ... ;
> use-project /MyProject/MyCommon/ : MyCommon;
> use-project /MyProject/MyLibrary/ : MyLibrary;
> use-project /MyProject/MyGui/ : MyGui;
> build-project MyGui;
> ----------<jamfile-end>----------
> The other tree jamfiles for the two lib and one exe projects look as
> follows:
> lies in ./MyCommon/
> ----------<jamfile-begin>----------
> lib MyCommon: ...
> ----------<jamfile-end>----------
> lies in ./MyLibrary/
> ----------<jamfile-begin>----------
> lib MyLibrary: ../MyCommon//MyCommon
> ----------<jamfile-end>----------
> lies in ./MyGui/
> ----------<jamfile-begin>----------
> exe MyGui: ../MyCommon//MyCommon
> ../MyLibrary//MyLibrary
> ----------<jamfile-end>----------
> So, all in all MyLibrary depends on MyCommon and MyGui depends on
> both MyCommon and MyLibrary.
> When building the project, compiles MyCommon and creates
> a dll successfully. Furthermore, it creates a dll for MyLibrary.
> Then tries to link MyCommon into MyLibrary and fils, as
> there is no .lib file created for MyCommon.
> The error is as follows:
> MyCommon\bin\msvc-8.0\debug\threading-multi\MyCommon.dll
> MyLibrary\bin\msvc-8.0\debug\threading-multi
> \MyLibrary.dll
> LINK : fatal error LNK1181: cannot open input file 'MyCommon\bin
> \msvc-8.0\debug\threading-multi\MyCommon.lib'
> Am I doing somethings wrong with the project dependencies or why are
> no .lib files created?
> Thanks,
> Chris
> --
> Dipl.-Inform. Christoph P. Mayer
> Institute of Telematics, University of Karlsruhe (TH)
> Zirkel 2, 76128 Karlsruhe, Germany
> Phone: +49 721 608 6415, Email: mayer_at_[hidden]
> Web:
> _______________________________________________
> Unsubscribe & other changes:

Boost-Build list run by bdawes at, david.abrahams at, gregod at, cpdaniel at, john at