c++ - MSVC2019 静态库中缺少符号名称
问题描述
我是 C++ 的新手,如果有人可以请帮助我!
我制作了一个运行良好的二进制 bigint 对象。我将它编译到一个静态库并尝试将其包含到另一个程序中,但它失败并出现如下错误:
combination.obj||error LNK2019: unresolved external symbol "public: static void __cdecl BinBigInt::bifactorial(class BinBigInt const &,class BinBigInt &)" (?bifactorial@BinBigInt@@SAXAEBV1@AEAV1@@Z) 在函数中引用无符号 __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 错误的主题,并检查了编译器设置和发布与调试版本匹配等,但没有任何帮助。
最后,我使用 MS dumpbin 手动检查了 .lib 文件中的符号,正如在某些主题中猜测的那样检查名称处理问题,但我发现很多 (9) 函数名称和所有 (7) 内部定义的运算符确实不包含在.lib 文件。(编译器只是弹出 5 个未解决的外部符号错误,那些我真正尝试在实现文件中使用的错误。)
这似乎不仅仅是一个名称处理问题,我绝对没有在 dumpbin 中找到那些符号名称。
虽然在对象内部定义的许多其他函数和在对象外部定义的运算符(如比较、按位等)包含在 .lib 文件中。
我用过:dumpbin /symbols binbigint.lib | findstr "function name"在很多版本中检查它们。
我将 Code::Blocks 与 MSVC2019 主机一起使用,并以 x64 为目标。
有人猜到什么会导致 lib 不包含某些符号?
(图书馆代码大约有 3.000 行长,所以我没有在这里复制......)
解决方案
出色地。我发现了问题...
那是我... :(
最初,我在 .cpp 文件的对象范围内编写了整个对象声明和定义。而且效果很好。而且我认为删除标头中的实现部分就足够了,我也可以将整个类代码与.cpp中的类标头一起保留,我忘记将.h包含到.cpp中,因此编译器不会生成有关它的错误。
它与复制粘贴一起使用的事实最终使我走上了正确的轨道(.h+.cpp 版本一定有问题)。
对不起打扰!
(这是我尝试用作 .lib 的第一堂课)
推荐阅读
- python - 在 R 中使用带有连字符的 python 模块?
- excel - 选项按钮验证进入框架
- r - 使用 R 中的 compare.linkage 比较两个数据帧并创建对来输入数据
- c# - 如果应用程序在 ASP.NET 中关闭,则执行代码
- github - 使用 github 集成更改 Visual Studio 2017 中的启动项目
- node.js - 为什么我不能从 Lambda 函数发送 SendGrid 电子邮件?
- math - x←y 在链表的上下文中如何表达?
- c# - 如何在已知长度内匹配字母和数字的精确组合?
- python - 如何在python3的csv文件中写入一次列
- python-3.x - 使用 pipenv install 自动执行预提交运行