提问人:kroger9 提问时间:10/14/2022 最后编辑:kroger9 更新时间:10/14/2022 访问量:99
未定义的引用,但符号不匹配。函数被编译并存在于静态库中
Undefined references, but symbols don't match. Function is compiled and exist in static library
问:
谁能为我指明正确的方向?这是专有代码,所以我无法上传制作文件。
但这是 nm 的输出:libA
libA.a:someOfile.o: U _Z12funcABCPcPA80_cii
libA.a:overhead.o: U _Z12funcABCPcPA80_cii
这里是 nm 的 ,其中来自另外两个函数的感兴趣函数的渲染:libB
undefined references
libB.a:funcABC.o:0000000000000000 T _Z12funcABCPcPA64_ci
有一个类似的项目完成匹配.我正在移植代码库以支持新平台。_Z12FUNCABCPcPA64_ci
类似项目的这个 nm 输出:
libB.a:funcABC.o:0000000000000000 T _Z12funcABCPcPA64_c
libA.a:overhead.o: U _Z12funcABCPcPA64_c
澄清: 我只是为了在 SO 上发布而替换了函数名称:)
原始函数签名,在两个项目上:
#define LENGTH 64
bool funcABC( char* arg1, char arg2 [][LENGTH], int arg3)
溶液:
有问题的库未正确移植。这是一个旧版本,我没有移植。因此,由于下面的评论,它不断出现链接错误。 应该有以下声明,我应该仔细阅读函数定义。libB
libB
bool funcABC(char*arg1, char arg2 [] [LENGTH_INHEADER], int arg3, int arg4)
在 中,的宽度基于 。在 中,宽度应为 。funcABC.cpp
arg2
LENGTH 64
funcABC.h
LENGTH_INHEADER 80
答:
2赞
n. m. could be an AI
10/14/2022
#1
我假设您用 .这打破了混乱的 ABI。如果原始名称的长度为 12 个字符,则应将 12 替换为新长度。funcABC
_Z7funcABCPcPA80_cii
解缠到funcABC(char*, char (*) [80], int, int)
_Z7funcABCPcPA64_ci
解缠到funcABC(char*, char (*) [64], int)
_Z7funcABCPcPA64_c
解缠到funcABC(char*, char (*) [64])
这些是完全不同的功能。
评论
0赞
kroger9
10/14/2022
顺便说一句,你是怎么对符号进行修饰的?我想将其添加到我的调试知识库中。
2赞
n. m. could be an AI
10/14/2022
@kroger9 有 c++filt、llvm-cxxfilt 和 demumble 等工具。
评论