我正在处理一个较旧的 c++ Visual Studio 2003 项目,该项目使用一个静态 .lib(其中的源代码已随时间丢失),我想将其移至 Visual Studio 2010 或更高版本。在 2010 年尝试构建时,有一堆 LNK2001 链接器错误,都指向相同的符号:
LNK2001:未解析的外部符号“__declspec(dllimport) >public: char const * >__thiscall type_info::name(void)const” (__imp_?>name@type_info@@QBEPBDXZ)
在进行了一些挖掘之后,似乎尝试在较新版本的 MS c++ 中使用较旧的静态库进行构建很麻烦或可能不可能,并且发生此特定错误是因为 VS2005+ 使用的较新 MSVCRT.dll 对 type_info:: 有不同的定义:名称(无效):
type_info::name(__type_info_node*)
这里有一个 MSDN 论坛问题,存在同样的问题,看来原始发帖人可能已经找到了解决方案 - 他至少可以构建它,但我无法使用将以下代码放入的解决方法来做到这一点该项目:
#include "stdafx.h"
#pragma warning(disable:4273)
struct __type_info_node {
void *memPtr;
__type_info_node* next;
};
extern __type_info_node __type_info_root_node;
class type_info {
public:
__declspec(dllimport) const char* name() const;
__declspec(dllimport) const char* name(__type_info_node*) const;
};
const char* type_info::name() const {
return name(&__type_info_root_node);
}
我尝试使用该代码以不同的方式构建 - 插入现有文件,新文件,并将其编译为 .obj 并使用 lib.exe 工具用所述 .obj 更新原始 .lib 然后构建,但所有尝试以原始错误或不同错误结束 - type_info::name 的重新定义错误。我对 c/c++ 和 VS 还很陌生,所以也许我遗漏了一些东西。
有谁知道解决此问题并构建更新版本的 VS 的方法?还是我坚持使用 2003 版本?