gtk程序编译和链接过程

来源:互联网 发布:sdl fcc amc输出数据 编辑:程序博客网 时间:2024/06/05 11:35

最近在调查GTK程序,

发现编译和运行都不是很顺利。

按照例子写了一个hello程序后,

编译过不去,出现错误

我编译的命令如下:#gcc testgtk.c -o gtk1

错误如下:testgtk.c:1:21: error: gtk/gtk.h: 没有该文件或目录

在百度上找了一些帖子,

告诉我要这样编译#gcc testgtk.c -o gtk1 `pkg-config --cflags --libs gtk+-2.0`

pkg-config是一个工具,用来解决编译和链接有文件和库文件不一致的问题。

它提供的主要功能有:

<1> 检查库的版本号。如果所需库的版本不满足要求,打印出错误信息,避免连接错误版本的库文件。

<2> 获得编译预处理参数,如宏定义,头文件的路径。

<3> 获得编译参数,如库及其依赖的其他库的位置,文件名及其他一些连接参数。

<4> 自动加入所依赖的其他库的设置。增加了这个编译参数后,编译就通过了。

下面就开始运行了:

执行#./gtk1运行时提示Gtk-WARNING **:

cannot open display然后找到一篇解决这个问题的文章,

增加环境变量#export DISPLAY=:0.0

然后接换到普通用户,这个还没弄明白为什么

原文如下:Gtk-WARNING **: cannot open display2008-04-07 00:09

转载:你在为“Gtk-WARNING **: cannot open display:”烦恼吗?2007-12-06 15:00

转载地址:http://unix-cd.com/unixcd12/article_6842.html 正文:

在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处.

直接登陆图形界面或者登陆命令行界面后使用startx启动图形,

DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序,

图形将显示在本地窗口上, 在终端上输入printenv查看当前环境变量, 输出结果中有如下内容:

DISPLAY=:0.0 使用xdpyinfo可以查看到当前显示的更详细的信息. DISPLAY 环境变量格式如下host:NumA.NumB, host指Xserver所在的主机主机名或者ip地址, 图形将显示在这一机器上, 可以是启动了图形界面的Linux/Unix机器, 也可以是安装了Exceed, X-Deep/32等Windows平台运行的Xserver的Windows机器. 如果Host为空, 则表示Xserver运行于本机, 并且图形程序(Xclient)使用unix socket方式连接到Xserver, 而不是TCP方式. 使用TCP方式连接时, NumA为连接的端口减去6000的值, 如果NumA为0, 则表示连接到6000端口; 使用unix socket方式连接时则表示连接的unix socket的路径, 如果为0, 则表示连接到/tmp/.X11-unix/X0 . NumB则几乎总是0. 如果使用su username或者su - username切换到别的用户, 并且使用命令export DISPLAY=:0.0 设置DISPLAY环境变量, 运行图形程序(如xclock)时会收到如下错误: Xlib: connection to ":0.0" refused by serverXlib: No protocol specifiedError: Can't open display: :0.0 这是因为Xserver默认情况下不允许别的用户的图形程序的图形显示在当前屏幕上. 如果需要别的用户的图形显示在当前屏幕上, 则应以当前登陆的用户, 也就是切换身份前的用户执行如下命令xhost + 这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上. 在2台Linux机器之间, 如果设置服务器端配置文件/etc/ssh/sshd_config中包含X11Forwarding no 客户端配置文件/etc/ssh/ssh_config包含ForwardX11 yes 则从客户端ssh到服务器端后会自动设置DISPLAY环境变量, 允许在服务器端执行的图形程序将图形显示在客户端上. 在服务器上查看环境变量显示如下(这个结果不同的时候并不相同)DISPLAY=localhost:10.0 在客户机上用netstat -lnp可以看到有程序监听了6010端口tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 4827/1 如 果希望允许远程机器上的图形程序将图形显示在本地机器的Xserver上, 除了要设置远端机器的DISPLAY环境变量以外, 还需要设置本地机器的Xserver监听相应的TCP端口. 而现在的Linux系统出于安全的考虑, 默认情况下不再监听TCP端口. 可通过修改/etc/X11/xinit/xserverrc文件, 将exec /usr/bin/X11/X -dpi 100 -nolisten tcp 修改为exec /usr/bin/X11/X -dpi 100 允许在直接使用startx启动图形时启动对TCP端口的监听. 修改/etc/kde3/kdm/kdmrc, 将ServerArgsLocal=-nolisten tcp 修改为ServerArgsLocal= 允许kdm作为显示管理器时, 启动会话时监听相应的TCP端口. 修改/etc/gdm/gdm.conf, 在[Security]一节增加DisallowTCP=false 或者在登陆窗口选择"Options" -> "Configure Login Manager..."

原创粉丝点击