MSVC2019 静态库中缺少符号名称
MSVC2019 Missing symbol names from static library
我是C++新手,如果有人可以,请帮助我!
我做了一个二进制的bigint对象,效果很好。 我将其编译为静态库并尝试将其包含在另一个程序中,但它失败并出现如下错误:
组合.obj||错误 LNK2019:未解析的外部符号"public: static void __cdecl BinBigInt::bifactorial(class BinBigInt const &,class BinBigInt &(" (?bifactorial@BinBigInt@@SAXAEBV1@AEAV1@@Z( 在函数"unsigned __int64 __cdecl combi::nonrepComb(char,char,class std::basic_string,class std::分配器>("中引用(??$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 个未解决的外部符号错误,这些错误是我真正尝试在实现文件中使用的。
这似乎不仅仅是一个名字问题,我绝对没有找到那些带有垃圾箱的符号名称。
而许多在对象内部定义的其他函数和在对象外定义的运算符(如Comparisson,按位等(包含在.lib文件中。
我使用:dumpbin/symbol binbigint.lib | findstr "函数名称">在很多版本中检查它们。
我将代码::块与MSVC2019主机和目标两个 x64 一起使用。
有人猜测库不包含一些符号有什么可以解释的?
(库代码大约有 3.000 行长,所以我没有在这里复制......
嗯。我发现了问题...
那是我... :(
最初,我在.cpp文件中编写了对象范围内的整个对象声明和定义。 而且效果很好。我认为删除标头中的实现部分就足够了,我也可以将整个类代码与类标头一起保留在.cpp中,我忘记将 .h 包含在.cpp,因此编译器不会生成有关它的错误。
它与复制粘贴一起使用的事实使我最终走上了正确的轨道(那一定是 .h+.cpp 版本存在一些问题(。
抱歉打扰了!
(这是我尝试用作.lib的第一堂课(
- 使用gcc从静态链接的文件中查找可选符号
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 仅在少数方法(静态或共享库)中解析的外部符号
- MSVC2019 静态库中缺少符号名称
- 使用静态 constexpr 成员的未解析外部符号
- 协议缓冲区的静态链接会导致与现有符号冲突
- ctypes,添加静态库时未定义的符号
- 在Qt5上去静态库:架构的未定义符号x86_64:
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 覆盖性静态分析说无符号的int是char(C++)
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 如何防止静态库中的重复符号?
- CURL 静态链接未解析的外部符号
- 动态库没有静态库文件的符号
- 使用静态变量未解析的外部符号/未定义的引用时出错
- 未解析的外部符号静态变量(标头中定义的方法使用的变量)
- 奇怪的无符号静态常量不是类模板中的常量表达式