1

I try to reorganize our project from static libs into shared libraries of the subprojects.

Well, using VS Compiler all exporting classes needs a _declspec(dllexport) and importing them needs _declspec(dllimport). Works fine. But I got troubles with all classes derived from boost members (e.g. singleton, or ptr_map).

I get the error

error C2487: 'boost::serialization::singleton::instance' : member of dll interface class may not be declared with dll interface

Microsofts solution is not very helpful, because changing boosts code would maybe not be a good idea;)

Is it not a good idea to export boost derived classes? Does anybody know where this comes from or maybe knows howto fix?

(samplecode below)

thanks!


Here's a sample (mylib.h as shared library project named: "myLib"):

#ifndef _MY_LIB_H_
#define _MY_LIB_H_

#include <string>
#include <boost/serialization/singleton.hpp> 
using boost::serialization::singleton;

#ifdef MYLIB_EXPORTS
    #define PORT_DLL __declspec(dllexport)
#else
    #define PORT_DLL __declspec(dllimport)
#endif

class PORT_DLL MyLib
    : singleton<MyLib>
{
public:
    std::string GiveMeOutput() const;
};

#endif //_MY_LIB_H_

it's implementation (myLib.cpp)

#include "myLib.h"

std::string
MyLib::GiveMeOutput() const
{
    return "some output";
}

an easy main.cpp (as executable project)

#include <iostream>
#include "../myLib/myLib.h"

int main()
{
    MyLib lib;
    std::cout << lib.GiveMeOutput();
    return 0;
}

some points:

  • VS2010
  • x64
  • boost 1.52
mistapink
  • 1,926
  • 1
  • 26
  • 37
550
  • 1,070
  • 1
  • 13
  • 28
  • 1
    Well self fixed: moving PORT_DLL in front of each method fixes the troubles. say: `class MyLib : singleton { public: std::string PORT_DLL GiveMeOutput() const; };` did it! =) – 550 Feb 13 '13 at 19:04

0 Answers0