gpt4 book ai didi

c - Ruby 扩展链接错误

转载 作者:行者123 更新时间:2023-11-30 14:28:49 25 4
gpt4 key购买 nike

每当我尝试链接my Ruby extension时,我总是收到这个相当模糊的链接错误。 :

/usr/bin/ld: Mg.o: relocation R_X86_64_PC32 against undefined symbol `init_window_class_under' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: Bad value

我找不到任何关于此的信息。我试验了一段时间,当我删除头文件时,它链接得很好,所以我在没有它们的情况下继续前进(是的,非常糟糕的主意)。

事实证明我现在需要它们。那么,这个错误到底是什么,如何消除它?

更新:清除所有内容后,我开始收到这些警告:

warning: ‘init_window_class_under’ used but never defined
warning: ‘init_display_mode_class_under’ used but never defined

当我第一次遇到这个问题时,这些也出现了。我不太确定它们的意思。

最佳答案

更新后的错误告诉您,您正在某处引用 init_window_class_underinit_display_mode_class_under 但它们尚未定义。这些函数实际上是在 Window.c 中定义的,但它们在源文件和头文件中都声明为 static。从 Window.c 中的函数中删除 static 链接修饰符,并在 Window.h 中将它们声明为 extern。看来您在 Display.c 以及 x11 子目录中的所有内容中犯了同样的错误。

声明为static的任何内容都具有文件范围,并且在文件本身之外不可见。

您原来的错误:

undefined symbol `init_window_class_under'

发生的原因是 Window.c 中的所有函数(尤其是 init_window_class_under)都是 staticstatic函数不会产生任何符号供链接器查找。只有具有外部链接的实体才会在目标文件中生成符号。

关于c - Ruby 扩展链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com