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