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)
我是 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)