【问题标题】:C++ IDE migration from VS 6 to VS 2013C++ IDE 从 VS 6 迁移到 VS 2013
【发布时间】:2015-03-17 17:24:03
【问题描述】:

一个 C++ 项目可以通过 VS6 编译而不会出现错误和警告。 使用 VS 2013 Prof. 时,会出现链接器问题。他们提供了一种模式,即 std::basic_string。

代码是 2007 年编写的,但不是我写的。

被构造函数引用:

vrun.obj:错误 LNK2019:未解析的外部符号 "__declspec(dllimport) public: char const * __thiscall std::basic_string,类 std::allocator >::c_str(void)const " (__imp_?c_str@?$basic_s string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEPBDXZ) 在函数 "public: __thiscall VTrs::VTrs(class VMessageContext &)" (??0VDMTrs@@QAE@AAVVDMMessageHandlerContext@@@Z)

在 vrun.cpp 中:

VTrs::VTrs(VMessageContext& handler_):
Inherited(RXS::rName().c_str()),
_handler(handler_)
{
}

(c_str -> const char* c_str() const; --- C98 风格 --- C11 尚未应用到项目中)

在 vrun.h 中:

VTrs(VMessageContext&);

由操作员引用:

vrun.obj : error LNK2019: unresolved external symbol "__declspec(dllimport)
 public: int __thiscall std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> >::compare(char const *)const " (__imp_?compare@?$basi
c_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEHPBD@Z) referenced in
 function "bool __cdecl std::operator==<char,struct std::char_traits<char>,clas
s std::allocator<char> >(class std::basic_string<char,struct std::char_traits<c
har>,class std::allocator<char> > const &,char const *)" (??$?8DU?$char_traits@
D@std@@V?$allocator@D@1@@std@@YA_NABV?$basic_string@DU?$char_traits@D@std@@V?$a
llocator@D@2@@0@PBD@Z)

指 - 就解释而言 - 标准运算符。 (没有对引用字符串的== 进行运算符重载)

顺便说一句,代码本身不包含“std::basic_string”。 已阅读相应的 msdn 文章,但此问题尚未解决。

'通常'的问题,例如 "C" 修饰符修改已被考虑用于另一个代码。

任何提示如何应对?

编辑:第一次使用 Visual Studio 2013 打开项目时,会显示一种转换对话框。我同意了,但它影响了 VC++ 目录。在将带有 ClearCase 的项目文件与之前的版本进行比较时,它是可见的。 UndoCheckout(通过 ClearCase)应用旧状态。现在可以了。

【问题讨论】:

  • RXS::rName().c_str() 在我看来确实像 std::basic_string::c_str
  • string::c_str() 是一个内联函数,你不应该对它有链接依赖。我只能猜测您正在使用旧版本的 &lt;string&gt; 标头进行编译。使用 /showIncludes 编译选项并确保所有头文件都来自正确的目录。

标签: c++ visual-studio visual-studio-2013


【解决方案1】:

您的链接器需要从相关的 lib 文件中获取更新的 MSVC 标准库,并且它应该在您迁移项目时选择它。查看项目属性->配置属性->链接器->输入并确保“忽略所有默认库”设置为否

【讨论】:

    【解决方案2】:

    第一次使用 Visual Studio 2013 打开项目时,会显示一种转换对话框。我同意了,但它影响了 VC++ 目录。在将带有 ClearCase 的项目文件与以前的版本进行比较时,它是可见的。 UndoCheckout(通过 ClearCase)应用旧状态。现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      相关资源
      最近更新 更多