WinXp GTK开发环境手记.

本文档详细介绍了如何在Windows XP系统上搭建GTK开发环境,包括安装MinGW、MSYS及GTK等必要组件,并通过SHELL脚本完成GTK程序的编译。
WindowsXP下GTK开发环境手记

1) MinGW,MSYS

到官网http://sourceforge.net/project/showfiles.php?group_id=2435
先下载MinGw http://downloads.sourceforge.net/mingw/MinGW-5.1.4.exe?modtime=1209244789&big_mirror=1
和 MSYS http://downloads.sourceforge.net/mingw/MSYS-1.0.10.exe?modtime=1079444447&big_mirror=1

MinGW提供gcc编译器支持,MSYS提供make功能,当然自带一个SHELL环境也有用.

先安装MinGW,再安装MSYS.

2) GTK
sf的一个站http://sourceforge.net/project/showfiles.php?group_id=98754
我这里下的是 gtk-2.12.9-win32-2.exe
http://downloads.sourceforge.net/gladewin32/gtk-dev-2.12.9-win32-2.exe?modtime=1208660130&big_mirror=0

安装GTK2.中途应该会自动识别出MSYS的位置.

记得把 XXX/GTK/lib/pkgconfig 加入系统变量 PKG_CONFIG_PATH
下面用到 pkg-config.exe

3) 上面几个BIN的位置都加入PATH变量,此处略.

此时编译普通的c应该是没问题的.

但是编译GTK程序的话,包路径是个主要的问题.

想引入 GTK的 .h 和 .lib 文件的话,当然可以用 I参数传入.但是太繁,这里不讨论.

GTK自带一个pkg-config 工具,就是以程序的形式把上面的参数值求出来,传给前面的gcc.

比如有程序 hello.c, 编译命令应该像下面这样

>gcc -o hello.exe hello.c `pkg-config --cflags --libs gtk+-2.0`

后面那句话,都知道是求GTK的库路径的.
但是两个倒单引号括起来的命令方式不是CMD的,而且SHELL的.

这样就用到最上面提到MSYS的SHELL功能了.

上面2)正常安装结束的话, 此时 WIN+R 输入sh应该 可以得到一个SHELL窗口.

此时再输入上面的编译命令,显示信息就会不一样了.

4)上面说的显示信息不一样,是指倒引号命令可以被执行,但是还是有错.下面来解决.

如果操作一致的话,应该得到信息说缺少 pixman-1.pc

呵呵,这个不用急,缺啥补啥.
下载 pixman-devel-0.10.0-1.ML5.i386.rpm

ftp://ftp.pbone.net/mirror/www.startcom.org/ML-6.0.6/updates/i386/pixman-devel-0.10.0-1.ML5.i386.rpm

这是个以前线帽用的格式,不怕用7zip(www.7-zip.org)就可以打开.
顺便说一下,这个小巧的FREE压缩工具,真的很好用的.
个人觉得的比WINRAR好用多了.

解出上面的东东,找用pixman-1.pc 放到 %PKG_CONFIG_PATH%下面去.

到此安装软件的部分结束了.(IDE此处不讨论)

5)现在具体的编译方式变成一个SHELL脚本了.
在hello.c的目录下新建一个 make.sh
写入 gcc -o out.exe *.c `pkg-config --cflags --libs gtk+-2.0`
保存.

进入 SH模式,到该目录下
$ sh ./make.sh

恭喜.你的第一个GTK图形程序出来了.

后记,本人是C方面的菜鸟,所以编译方面可能由makefile来实现更合理.
但目前只是追求GTK环境的实现,以便能顺利学完 Tutorial.
<think> 首先,用户查询是关于解决开发GTK应用时缺少 `gtkx.h` 文件的问题。用户提供了几个引用,我需要参考这些引用来解决这个问题。 回顾引用: - 引用[1]: 提到使用 Gtk# 从 GitHub,支持 .NET Core 和 GTK3。 - 引用[2]: 描述了在 CentOS 7 上编译时缺少 `gtk/gtk.h` 的错误,并提到需要指定库文件。 - 引用[3]: 指出在 Linux 上安装 GTK 开发环境来解决缺少 `gtk/gtk.h`。 - 引用[4]: 讨论多线程问题,但提到了类似的错误。 用户的问题具体是缺少 `gtkx.h` 文件。我不熟悉 `gtkx.h`;标准 GTK 头文件是 `gtk/gtk.h`。可能用户误写了或用了特定扩展。标准GTK头文件是 `gtk.h`,有时可能被引用为 `gtk/gtk.h`。 在引用中,引用[2]和[3]直接谈到缺少 `gtk/gtk.h` 的错误,建议安装开发包。类似地,缺少 `gtkx.h` 可能也需要安装相应的开发包。 `gtkx.h` 可能不是一个标准头文件。或许是用户打字错误?或者是特定包的一部分?我应该假设用户指的是 `gtk/gtk.h` 或类似的东西。 用户说"缺少gtkx.h文件",所以我应该针对 `gtkx.h` 来回答。但根据我的知识,标准 GTK 开发包提供 `gtk.h`,而不是 `gtkx.h`。或许是扩展库或自定义头文件。 在引用[2]中,用户提到在 CentOS 7 上编译 GTK3 应用,缺少 `gtk/gtk.h`,并建议安装开发包。 类似地,引用[3]说安装 `libgtk2.0-dev` 或 `gnome-devel`。 所以,解决方法是安装 GTK 开发包。 现在,针对 `gtkx.h`,或许用户指的是 `gtk.h`?或者是特定版本?我应该引导用户检查包管理器。 用户环境:引用中提到 CentOS 7,但用户没有指定当前系统。我应该假设是 Linux 系统。 用户说"开发GTK应用",但从引用看,可能是在 Linux 上。 步骤: 1. 确认环境:用户可能在 Linux 系统上开发 GTK 应用。 2. 错误原因:缺少头文件通常是因为没有安装开发包。 3. 解决方案:安装 GTK 开发包。对于基于 Debian 的系统,如 Ubuntu,使用 `sudo apt-get install libgtk-3-dev` 或类似。对于基于 RPM 的系统,如 CentOS,使用 `sudo yum install gtk3-devel` 或类似。 4. 针对 `gtkx.h`:既然标准文件是 `gtk.h`,我应建议用户检查文件名是否正确。或许是 `gtk-x11.h` 或类似?但标准是 `gtk.h`。 在 GTK 中,头文件是 `gtk/gtk.h`,所以编译器需要找到这个路径。 对于 `gtkx.h`,我认为用户可能误写了。我应该问清楚,但作为 AI,我可以提供通用解决方案。 从上下文,用户在引用中提到了类似错误,所以解决方法相同。 回答结构: - 清晰、逐步解决。 - 使用中文。 - 遵循系统指令:数学表达式用 `$...$`,独立公式用 `$$...$$`(但这里可能不需要)。 - 生成相关问题。 - 添加引用标识。 回答内容: 1. **识别问题**:解释缺少头文件通常是由于未安装开发包。 2. **解决方法**: - 对于不同的 Linux 发行版,提供安装命令。 - Debian/Ubuntu: `sudo apt-get install libgtk-3-dev` - CentOS/RHEL: `sudo yum install gtk3-devel` - 确保包正确安装后,编译器能找到头文件。 3. **验证安装**:建议检查头文件位置,如 `/usr/include/gtk-3.0/gtk/gtk.h`。 4. **针对 `gtkx.h`**:说明标准 GTK 头文件是 `gtk.h`,如果确实需要 `gtkx.h`,可能来自特定扩展;建议检查文档或正确包含路径。 5. **编译命令**:提醒用户在使用 gcc 编译时指定 include 路径,例如:`pkg-config --cflags gtk+-3.0`。 在引用[2]中,提到需要指定库文件,所以编译时应使用 `pkg-config`。 例如:`gcc -o output source.c $(pkg-config --cflags --libs gtk+-3.0)` 6. **引用参考**:自然地添加引用标识,如 [^1], [^2], [^3]。 生成相关问题: - 基于主题,如 GTK 开发、常见错误等。 相关问题: 1. 如何在 Linux 系统上安装 GTK 开发环境2. 解决 GTK 编译错误的其他常见方法? 3. GTK 应用开发的最佳实践? 确保回答真实可靠:基于常识和引用。 最终回答结构: - 引言:确认问题。 - 步骤解决。 - 总结。 - 相关问题。 </think> ### 解决开发 GTK 应用时缺少 `gtkx.h` 文件的方案 在开发 GTK 应用时,缺少 `gtkx.h` 头文件通常是未安装完整的 GTK 开发包或编译器找不到正确的包含路径所致。根据您提供的引用(特别是引用[2]和引用[3]),这类错误在 Linux 系统中很常见,通常是由于系统缺少必要的开发库或环境变量未配置造成的。`gtkx.h` 可能是一个打字错误或特定扩展文件(标准 GTK 头文件为 `gtk/gtk.h`),我会基于您的需求提供通用解决方案。以下步骤将帮助您逐步解决问题。 #### 步骤 1: 确认环境并检查头文件 - **原因分析**:GTK 开发依赖于系统安装的开发包(如 GTK3)。如果 `gtkx.h` 是标准 GTK 头文件的别名或误写(标准文件应为 `gtk/gtk.h`),您需要先安装开发包。 - 在 Linux 系统中,GTK 头文件通常位于 `/usr/include/gtk-3.0/gtk/` 路径下(对于 GTK3)。 - 使用命令检查系统是否存在类似文件: ```bash ls /usr/include/gtk-3.0/gtk/gtk.h # 检查标准 gtk.h ``` 如果返回文件存在,但您仍要求 `gtkx.h`,可能需确认文件名是否正确或是否为自定义扩展(如某些旧版本或第三方库)。引用[2]中提到,在 CentOS 7 下找不到头文件时,需安装开发包[^2]。类似地,引用[3]说明安装开发环境可解决此类问题[^3]。 #### 步骤 2: 安装 GTK 开发包 根据您的 Linux 发行版,安装相应的开发包。以下是常见系统的命令: - **Debian/Ubuntu 系统**: ```bash sudo apt-get update sudo apt-get install libgtk-3-dev # 安装 GTK3 开发包 ``` 安装后,头文件将位于 `/usr/include/gtk-3.0/gtk/`。 - **CentOS/RHEL 系统**(与引用[2]的 CentOS 7 环境一致): ```bash sudo yum install epel-release # 确保 EPEL 仓库已启用 sudo yum install gtk3-devel # 安装 GTK3 开发包 ``` 安装后,头文件通常位于 `/usr/include/gtk-3.0/gtk/`。 - **其他系统**: - 对于 Arch Linux:`sudo pacman -S gtk3` - 对于 macOS(使用 Homebrew):`brew install gtk+3` 安装完成后,运行 `pkg-config --modversion gtk+-3.0` 验证版本。 注意:如果 `gtkx.h` 确为特定扩展(如某些自定义模块),可能需要额外安装包。建议查阅 GTK 官方文档或使用 `apt search gtk` / `yum search gtk` 搜索相关包。 #### 步骤 3: 配置编译器包含路径 即使安装了开发包,编译时仍需指定正确的包含路径和库文件(如引用[2]所述)。使用 `pkg-config` 工具自动生成标志: - 编译命令示例(替换 `your_source.c` 为您的源文件): ```bash gcc -o your_program your_source.c $(pkg-config --cflags --libs gtk+-3.0) ``` - `pkg-config --cflags` 添加包含路径(如 `-I/usr/include/gtk-3.0`)。 - `pkg-config --libs` 链接所需库。 如果错误仍出现,检查 `pkg-config` 是否安装:`sudo apt-get install pkg-config` 或 `sudo yum install pkgconfig`。 #### 步骤 4: 验证和测试 - 创建一个简单的测试程序(例如 `test.c`): ```c #include <gtk/gtk.h> // 使用标准 gtk.h,gtkx.h 可能需替换为正确名称 int main(int argc, char *argv[]) { gtk_init(&argc, &argv); GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_show(window); gtk_main(); return 0; } ``` - 编译并运行: ```bash gcc -o test test.c $(pkg-config --cflags --libs gtk+-3.0) ./test ``` 如果窗口正常显示,说明 GTK 环境已正确配置。 #### 总结 解决 GTK 开发中缺少头文件问题的关键是安装完整的开发包并配置编译器路径。参考您的描述,在 CentOS 7 等系统中,类似错误可通过安装 `gtk3-devel` 解决[^2]。如果 `gtkx.h` 不是标准文件,请确认是否为打字错误或特定库需求(如 Gnome 扩展),并检查相关包的文档。开发环境配置好后,多线程问题(如引用[4]所述)也能通过正确使用 GTK API 避免[^4]。如果您提供更多环境细节(如操作系统和 GTK 版本),我可以进一步优化方案。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值