所以,我正在尝试为我的大型项目编译DLL。这个想法是它有几个部分。一种类型的库,它被编译成DLL,以及DLL链接到的应用程序。我一直收到以下警告:
warning C4251: 'plf::lfInvalidIndexExcpt::message': class 'boost::container::basic_string<char,std::char_traits<char>,boost::container::new_allocator<char>>' needs to have dll-interface to be used by clients of class 'plf::lfInvalidIndexExcpt'
这是给我带来麻烦的代码。
我的DLL导出/导入宏定义如下:
#ifdef LF_ENGINE_EXPORTS
#define LFE_API __declspec(dllexport)
#else
#define LFE_API __declspec(dllimport)
#endif
现在,我在我的库中使用了boost,并且我有以下内容:
typedef boost::container::string lfString;
类lfInvalidIndexExcpt的定义如下:
namespace plf
{
class LFE_API lfInvalidIndexExcpt
{
public:
explicit lfInvalidIndexExcpt(lfSize idx);
lfInvalidIndexExcpt(lfSize idx, const lfString& descr);
const char* what() const throw();
private:
lfString message;
void makeMessage(lfSize idx, const lfString& descr);
};
};
我应该提一下,lfSize只是std :: size_t的typedef。
我想知道这个警告实际意味着什么,如果我可以在我的DLL中使用像这样的Boost,如果有的话。另外,如果这不是使用Boost的正确方法是什么?
谢谢,
-Zack Frost
答案 0 :(得分:0)
所以,我似乎通过玩弄我的代码和窥探StackOverflow找到了我自己问题的解决方案!我似乎只需要从类声明中删除DLL导出宏并将其添加到成员函数中。它现在似乎编译和工作正常!
解决方案来自此StackOverflow帖子(通过 frast 回答):std::vector needs to have dll-interface to be used by clients of class 'X warning