我最近在Visual Studio 2008中创建了一个静态C++库.在这个项目中,我使用了std::string该类的一些方法.现在我想在Visual Studio 2013项目中使用此库.
问题是:
两个Visual Studio版本都使用不同的平台工具集,并且由于链接器错误,项目将无法编译,如:
错误4错误LNK2001:未解析的外部符号"__declspec(dllimport)public:__ thishisall std :: basic_string,class std :: allocator> :: basic_string,class std :: allocator>(void)"(__ imp _ ?? 0?$ basic_string @杜?$ @ char_traits @ d @@性病V'$ @分配器@ d @@ 2 STD @@ QAE @ XZ)
有没有办法让库与所有平台工具集兼容并使用一些标准类,如std::string?
仅供参考:VS2008正在使用v90平台工具集,VS2013正在使用v120平台工具集.
谢谢.
编辑:
如果我在库中使用一些标准方法std::vector,我就不能再实现库了.
这有效:
unsigned int TestClass::TestMethod()
{
return 2;
}
Run Code Online (Sandbox Code Playgroud)
这不是:
unsigned int TestClass::TestMethod()
{
std::vector<unsigned char> vtest;
vtest.push_back(0xff);
return 2;
}
Run Code Online (Sandbox Code Playgroud)
错误:
错误1错误LNK2019:未解析的外部符号"public:static void __cdecl std :: _ String_base :: _ Xran(void)"(?_ Xran @ _String_base @std @@ SAXXZ)在函数"public:class std :: basic_string,class std"中引用:: allocator>&__thiscall std :: basic_string,class std :: allocator> :: assign(class std :: basic_string,class std :: allocator> const&,unsigned int,unsigned int)"(?assign @?$ basic_string @DU?$ @ char_traits @ d @@性病V'$ @分配器@ d @@ 2 STD @@ QAEAAV12 @ ABV12 @ II @ Z)
RT lib设置为/ MT,并且禁用程序优化(/ GL).
有没有什么办法解决这一问题?
谢谢.
小智 0
问题解决了:
我创建了一个 dll 而不是静态库。
还要确保禁用程序优化 (/GL) 并检查 /MT /MD 选项。
为了创建 dll,我将库的配置类型设置为“动态链接库 (.dll)”,并__declspec(dllexport)在头文件中定义,例如:
#define TEST_EXPORT
#ifdef TEST_EXPORT
#define TEST __declspec(dllexport)
#else
#define TEST __declspec(dllimport)
#endif
class TestClass
{
public:
std::string TEST TestMethod();
};
Run Code Online (Sandbox Code Playgroud)