【问题标题】:MSVC2019 Missing symbol names from static libraryMSVC2019 静态库中缺少符号名称
【发布时间】:2020-04-09 12:13:40
【问题描述】:

我是 C++ 新手,如果有人可以请帮助我!

我制作了一个运行良好的二进制 bigint 对象。 我将它编译到一个静态库并尝试将其包含到另一个程序中,但它失败并出现如下错误:

combinations.obj||error LNK2019: unresolved external symbol "public: static void __cdecl BinBigInt::bifactorial(class BinBigInt const &,class BinBigInt &)" (?bifactorial@BinBigInt@@SAXAEBV1@AEAV1@@Z) 引用在函数“unsigned __int64 __cdecl combi::nonrepCombination(char,char,class std::basic_string,class std::allocator >)”(??$nonrepCombination@D@combi@@YA_KDDV?$basic_string@DU?$char_traits@ D@std@@V?$allocator@D@2@@std@@@Z)|

如果我将这两个代码复制粘贴在一起,一切正常,所以代码似乎没问题。

我阅读了很多关于 LNK2019 错误的主题,并检查了编译器设置和 Release vs. Debug 版本匹配等,但没有任何帮助。

最后,我使用 MS dumpbin 手动检查了 .lib 文件中的符号,正如在某些主题中猜测的那样检查名称处理问题,但我发现很多 (9) 函数名称和所有 (7) 内部定义的运算符确实不包含在 .lib 文件中。 (编译器只是弹出 5 个未解决的外部符号错误,那些我真正尝试在实现文件中使用的错误。)

这似乎不仅仅是一个名字处理问题我绝对没有用dumpbin找到那些符号名称。

虽然在对象内部定义的许多其他函数和在对象外部定义的运算符(如比较、按位等)都包含在 .lib 文件中。

我使用过:dumpbin /symbols binbigint.lib | findstr "function name" 在很多版本中进行检查。

我将 Code::Blocks 与 MSVC2019 主机一起使用,并以 x64 为目标。

有人猜猜什么会导致 lib 不包含某些符号?

(库代码大概有3000行,这里就不复制了……)

【问题讨论】:

标签: c++ hyperlink symbols lnk2019 missing-symbols


【解决方案1】:

嗯。我发现了问题...

那是我... :(

最初我在一个 .cpp 文件的对象范围内编写了整个对象声明和定义。 而且效果很好。而且我认为删除标头中的实现部分就足够了,我也可以将整个类代码与.cpp中的类标头一起保留,我忘记将.h包含到.cpp中,因此编译器不会生成有关它的错误。

它与复制粘贴一起工作的事实使我最终走上了正确的轨道(这一定是 .h+.cpp 版本的问题)。

打扰了!

(这是我尝试用作 .lib 的第一堂课)

【讨论】:

    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 2010-12-25
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多