当前位置:Linux教程 - Linux文化 - 编译一个教老的C程序碰到的一个有关于X图形界面的问题

编译一个教老的C程序碰到的一个有关于X图形界面的问题


/******************************************************************************** * * Purpose: Program extracts information from the X server and displays * it on the screen. * Notes: Use the following command to compile. * * gcc hardware.c -lX11 * * Author: XW. Zheng * * Date: 31-Mar-06 * ********************************************************************************/ /************************* Includes *********************************************/ /* These are in /usr/X386 */

#include #include #include

#include

main() { Display * display; int screen; char * display_name = NULL; Window root; Visual* visual; // Connect to X display server display = XOpenDisplay(display_name); // Get screen ID screen = DefaultScreen(display); printf("\n\t Information extracted from the X server\n"); printf("\t--------------------------------------\n\n"); printf(" X server by \' %s\'\n", ServerVendor(display)); printf(" X Server protocol %d\n", ProtocolVersion(display)); printf(" X server Release %d\n", VendorRelease(display)); printf(" Screen is %dmm hight.\n", DisplayHeightMM(display, screen)); printf(" Screen is %dmm wide.\n", DisplayWidthMM(display, screen)); printf(" Screen is %d pixels high.\n", DisplayHeight(display, screen)); printf(" Screen is %d pixels wide.\n", DisplayWidth(display, screen)); visual = DefaultVisual(display, screen); printf(" %3d Colour map entries", visual->map_entries); printf(" (Number of colours on the screen at one time).\n"); printf(" %3d Display planes (bits per screen pixel).\n", DisplayPlanes(display, screen)); printf(" There is %d screens(s).\n", ScreenCount(display)); }

其实这段代码,是KDEVELPE里面的一个C程序的EXAMPLES, 我试着对他编译,但老是出错, gcc -o hardware_c hardware_c.c 的时候出错信息如下

hardware_c.c:64:2: warning: no newline at end of file /tmp/ccEJFRgk.o(.text+0x1e): In function `main': : undefined reference to `XOpenDisplay' collect2: ld returned 1 exit status

我不清楚这是什么意思,我试着在上面的几个头文件中查找是否有这个 XOpenDisplay的函数, cat Xlib.h | grep XOpenDisplay 是有的,但是他为什么说我 undefined reference 我有点不懂,

然后我又用了,documation里跟我说的方法 gcc hardware.c -lX11 就在代码的最上面的注释中,有的, 但是这次出错信息如下 hardware_c.c:64:2: warning: no newline at end of file /usr/bin/ld: cannot find -lX11 collect2: ld returned 1 exit status 我就搞不懂了, 是说我那个 -l 的参数错了问题吗,我 又用man gcc仔细找了找, 好象是L,所以又换了一下,但是还是不行,

说明1;这里面的出错信息,那个什么 no newline at end of file 和 这个没什么关系,但是要是有人 跟我说一下为什么 会有这个警告, 我会很感激, NEWLINE好象和换行有关系吧. 说明2: 不好意思,因为我在编译的时候,有几次那个GCC跟我说,什么X11找不到什么的,我觉的麻烦,就把头文件中的相对路径全改成绝对的了,所以,会很长, 不过这个路径没什么错误的,我是用 locate定位到的.

不好意思,提问提太长了,但是我又短不下来,

>>> 此贴的回复 >> newline的警告是因为源文件最后没有空行。

X11库在什么位置?用-L加上X11所在库的路径。-lX11还是要的,表示要连接该库。

>>> 此贴的回复 >> 对不起,我想这位朋友没有认真的看这道题, gcc hardware.c -lX11 是官方给出的写法,我不知道为什么不行

>>> 此贴的回复 >> 肯定是找不到库的位置了。 你可以通过两种方法: 1) 如feirygnu说的, 加上-L/usr/X11R6/lib (我假设你的库的位置是这个) 2) 修改 /etc/ld.so.conf ,加入 /usr/X11R6/lib, 用ldconfig -v 刷新库的配置

>>> 此贴的回复 >> 那谢谢了, 我在试试看, 不过,我并不认为

===================================================================== 是官方给出的写法 === 嘿嘿,这个我给不了,需要等我做了官:) 这个世界上一模一样的系统不多,所以官方的写法不一定适用于所有系统。 =====================================================================

我并不需要他达到那个水平, 但是,他应该保持基本的通用性. 我想主要的原因是, 因为那个C文件太早了, 是别人 94年写的, 他的另一个EXAMPLES,我花了六个小时才修改正确, 他原先的SOURCE 编译以后,老 说, 段错误,

但还是谢谢 fierygnu和joyself, 因为我感觉是我错了.