【发布时间】:2021-08-19 14:09:03
【问题描述】:
我正在使用 Visual Studio 2019 并为 ARM android 进行编译。 我的解决方案中的十二个库之一无法正确链接。
它显示了大量已定义和未定义的类方法。
这是一个使用命令行的示例:
nm -C -g Services_Droid.a 1>Services_Droid_All.txt
我得到一个列表,示例构造方法显示::
E:\code\Services_Droid_All.txt(5 次点击)
Line 834: U hCitem::hCitem(int)
Line 1073: U hCitem::hCitem(int)
Line 1197: 0000006c T hCitem::hCitem(int) // there is only one definition in this file
Line 1199: 0000006c T hCitem::hCitem(int)
Line 5747: U hCitem::hCitem(int)
将此库链接到我的主程序会生成三个的副本 链接失败的未定义项。
这个库中有大量的方法存在相同的问题。
任何关于导致此问题的原因以及如何解决此问题的想法将不胜感激。
【问题讨论】:
-
您确定所有这些未定义的符号与已定义的符号来自同一个目标文件吗?一个函数在一个目标文件中定义而在另一个目标文件中未定义是很正常的。库只是目标文件的集合。此外,构造函数有两个版本的符号是正常的(重命名的名称不同)。
-
我的分享在哪里:谢谢。我不知道图书馆员没有链接静态库。为什么未定义保留在主动态库链接中的任何想法? (即动态库链接在几个静态库中,这是其中之一。)
标签: linux gcc linker visual-studio-2019