プロジェクトを静的ライブラリからサブプロジェクトの共有ライブラリに再編成しようとしています。
さて、VS Compiler を使用すると、すべてのエクスポート クラスに_ declspec(dllexport)が必要であり、インポートには _ declspec(dllexport) が必要です。_declspec(dllimport) . 正常に動作します。しかし、boost メンバーから派生したすべてのクラス (singleton や ptr_map など) で問題が発生しました。
エラーが発生します
エラー C2487: 'boost::serialization::singleton::instance': dll インターフェイス クラスのメンバーが dll インターフェイスで宣言されていない可能性があります
ブーストコードを変更することはおそらく良い考えではないため、 Microsoftのソリューションはあまり役に立ちません;)
ブースト派生クラスをエクスポートするのは良い考えではありませんか? これがどこから来たのか、または修正方法を知っている人はいますか?
(以下のサンプルコード)
ありがとう!
以下にサンプルを示します (「myLib」という名前の共有ライブラリ プロジェクトとしての mylib.h):
#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