C2487 с форсированными членами

Я пытаюсь реорганизовать наш проект из статических библиотек в разделяемые библиотеки подпроектов.

Что ж, при использовании VS Compiler все экспортирующие классы нуждаются в _ declspec (dllexport), а для их импорта требуется _declspec (dllimport). Работает отлично. Но у меня возникли проблемы со всеми классами, производными от элементов Boost (например, singleton или ptr_map).

Я получаю ошибку

ошибка C2487: 'boost::serialization::singleton::instance': член класса интерфейса dll не может быть объявлен с интерфейсом dll

Решение Microsoft не очень полезно, потому что изменение буст-кода, возможно, не будет хорошей идеей;)

Разве это не хорошая идея экспортировать классы, производные от boost? Кто-нибудь знает, откуда это происходит или, может быть, знает, как это исправить?

(пример кода ниже)

Спасибо!


Вот пример (mylib.h как проект совместно используемой библиотеки с именем: "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_

это реализация (myLib.cpp)

#include "myLib.h"

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

легкий main.cpp (как исполняемый проект)

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

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

некоторые моменты:

  • VS2010
  • x64
  • повысить 1,52

0 ответов

Другие вопросы по тегам