加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

链接中的符号non-virtualthunk到底是什么

(2022-03-18 19:16:14)
标签:

non-virtual

thunk

undefined

symbol

分类: 计算机与 Internet
最近实现Apple Silicon,在链接时报错未解析符号
non-virtual thunk to QLayout::layout()
不知道如何生成这个符号。
经过一段时间的研究,发现这个只需要有多个基类,并且layout在第二个基类的虚方法列表中
并且,只有当第一个基类中也有虚函数表时,才会产生
non-virtual thunk to QLayout::layout()

直实做出来,才会发现,这东西就是上次查看的hnxx
conanchen@ConanChen ~ % nm -nm /Users/conanchen/M1Tools/Debug/Debug/libfaked_qtnonvirtual.a | grep layout
00000000000001b8 (__TEXT,__text) external __ZN12QLayoutBaseB6layoutEv
0000000000000240 (__TEXT,__text) external __ZN7QLayout6layoutEv
0000000000000250 (__TEXT,__text) external __ZThn8_N7QLayout6layoutEv
conanchen@ConanChen ~ % nm -nm /Users/conanchen/client-delivery/Output/MAC64/Core/Neutron/UI/Base/Fusion360.build/Release/NuBase.build/Objects-normal/arm64/ThreeBarLayout.o | grep layout
(undefined) external __ZN7QLayout6layoutEv
(undefined) external __ZThn16_N7QLayout6layoutEv
其中__ZThn8_N7QLayout6layoutEv和__ZThn16_N7QLayout6layoutEv
只有数字不同,这个是代表基类里面的成员变量等产生的偏移,这个需要手动了。
在第一个基类加上void* behn16;
就能把hn8变为hn16

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有