我正在为内部库编译CPython扩展,我很确定我在库中使用的其中一个函数是被诅咒的。
当我在CPython Extension .so上运行ld
时,会打印
./pyextension.so: undefined reference to `le_sig_cursed'
我不相信这是-l
标志的排序问题,或者它不能以某种方式找到共享库,因为共享库包含数百个函数,而它们除了这个之外都可以正常工作。
在共享库上运行nm --extern-only | grep le_sig_cursed
表明它确实存在。
0002ff70 T le_sig_cursed
在扩展程序上运行它显示未定义(如预期的那样)。
U le_sig_cursed
它在共享库标题中的原型看起来像这样
void le_sig_cursed(void);
在同一个头文件中还有其他功能具有完全相同的签名但它们链接正常。
我正在使用--no-undefined
,并且它不会在链接时抱怨。只有当我运行它或将扩展名传递给ld
时,它才能解决这一功能。
我能理解库是否加载并且没有任何功能正常工作,但是这个功能似乎没有什么特别之处,但它是唯一失败的功能。我该如何诊断?