1

我尝试将我们的项目从静态库重组为子项目的共享库。

好吧,使用 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
4

0 回答 0