请原谅新手问题,我的C非常非常生疏。 试图从http://www.leftfield.org/~dd/sw.html构建xrunclient,在IRIX64上,我遇到了:
ld32:错误:33:未解决的文字符号“XOpenDisplay”
我认为这是因为它无法找到合适的库,但它找到了没有投诉的头文件。如何识别哪个库已定义该例程,以便确保它在库路径中?
答案 0 :(得分:3)
教导男人钓鱼:
nm -o /usr/lib/lib*.a 2>/dev/null |
grep XOpenDisplay |
grep -w T
这是做什么的
在/usr/lib
中询问所有库中的符号。 (在64位系统上,您可能需要检查/usr/lib64
。)-o
选项不仅会打印符号,还会打印它来自的文件名。
抓住您关注的符号:XOpenDisplay
。
在文本部分中对该符号的定义进行Grep - 孤独T
是nm(1)
如何在文字部分。我可能还尝试grep -w [TD]
来获取文字或数据。
答案有点令人惊讶:
/usr/lib/libSDL.a:SDL_x11dyn.o:00000380 T XOpenDisplay
/usr/lib/libX11.a:OpenDis.o:00000420 T XOpenDisplay
我不确定-lSDL
是什么(如果我关心我会谷歌),但有-lX11
和生命一样大。
现在你可以找到你想要的任何缺失符号: - )
答案 1 :(得分:1)
答案是libX11.so - 它包含基本的Xlib例程,你可以告诉它这是一个Xlib例程,因为它以普通的“X”开头。如果它以“Xt”开头,那么你就知道它是Xt小部件集中的一个方法。
我不相信这个库的名称在15年以上发生了变化,所以书中显示的编译命令应该对你有用。我相信库名称也列在X例程的联机帮助页中(这当然意味着您必须提供联机帮助页,而不是每个人都这样做。)
除此之外,grep可能是你最好的选择,虽然在/ usr / lib中的grepping会打开对函数和声明的引用,所以这可能没用。还有一个命令行实用程序(你在Linux上运行,对吗?),它将显示.so的内容,这也可能很有用。
编辑:啊,Irix,不是Linux;在第一次阅读时没有注意到。我认为最好的方法是找到联机帮助页。答案 2 :(得分:0)
X11年后,我可以具体揭露与IRIX有关的问题的答案。
CC mycode.cpp -lX11
谁会认为有人会在2020年继续寻找这些信息:)