MSVC2019 静态库中缺少符号名称

MSVC2019 Missing symbol names from static library

我是 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) referenced in function "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 与 Debug 版本匹配等,但没有任何帮助。

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

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

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

我用过:dumpbin /symbols binbigint.lib | findstr "function name" 在很多版本中查看它们。

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

有人猜到是什么导致库不包含某些符号?

(库代码长约3000行所以我没有在这里复制...)

嗯。我发现了问题...

那是我...:(

最初,我在 .cpp 文件的 object 范围内编写了整个 object 声明和定义。 它运作良好。而且我认为删除 header 中的实现部分就足够了,我也可以将整个 class 代码与 class header 一起留在 .cpp 中,我忘记了将 .h 包含到 .cpp 中,这样编译器就不会生成有关它的错误。

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

抱歉打扰了!

(这是我的第一个 class,我尝试将其用作 .lib)