C++静态库和平台工具集兼容性

6 c++ visual-studio-2008

我最近在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 :: _ St​​ring_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)