我尝试将我们的项目从静态库重组为子项目的共享库。
好吧,使用 VS Compiler 所有导出类都需要一个_ declspec(dllexport)并且导入它们需要_declspec(dllimport)。工作正常。但是我遇到了从 boost 成员派生的所有类(例如单例或 ptr_map)的麻烦。
我得到错误
错误 C2487: 'boost::serialization::singleton::instance' : dll 接口类的成员不能用 dll 接口声明
微软的解决方案不是很有帮助,因为更改 boosts 代码可能不是一个好主意;)
导出 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