|
声明:作者同意将本文自由传播,但不得删改包括本声明及以下呼吁在内的任何内容。
呼吁:宪法第一条“中华人民共和国是工人阶级领导的、以工农联盟为基础的、
人民民主专政的社会主义国家。”所体现的阶级等级和专政思想与“人权天赋、
约法共和、自主选择、平等竞争”的政治文明常识相违背,呼吁人大将其改为
“中国是全体公民组成的,致力于保障公民基本权利,为公民的生存与发展提供
良好公共环境的法治国家。中国全体公民的基本权利一律平等。”
在Cygwin上建立GTK+开发环境
丁建华 <[email protected]> 2004.7.20
GTK+ 是个好东西, 在 linux 上做开发的没有不知道的. 我要讲的是 GTK+ for
Win32, 用 Cygwin 来做开发.
===================================================================
??? 从哪里下载 GTK+ for Win32 的运行文件?
>>> GTK+ 的官方网站是: http://www.gtk.org/ .
GTK+ for Win32 的官方网站是: http://www.gimp.org/~tml/gimp/win32/
可以下载 Gimp 和 GTK+ 的运行文件.
===================================================================
??? 我怎么知道 GTK+ 的这些 dll 文件真的能用呢?
>>> 安装 Gimp, 如果能用, 那么 GTK+ 一定是能用的. 注意你的 PATH 必须包含
GTK+ 的 dll 目录. 一般是 <installdir>/GTK/2.0/bin .
===================================================================
??? 从哪里下载 GTK+ for Win32 的开发文件?
>>> http://www.gimp.org/~tml/gimp/win32/downloads.html
===================================================================
??? 对下载的 zip 文件应该如何处理?
>>> 把这些 zip 文件解压到 /usr 目录下. 由于 Cygwin 对 /usr/bin 和 /usr/lib
是特殊对待的, 对这两个目录的访问实际上被转到了 /bin 和 /lib 目录下. 因此,
应该在解压后, 把 /usr/bin 和 /usr/lib 目录的内容分别转移到 /bin 和 /lib.
===================================================================
??? 为什么 pkg-config 给出的结果不正确?
>>> 在解压后的 lib/pkg-config/glib-2.0.pc 和其他 pc 文件中, 通常第一行都是:
<code> prefix=/target </code> 需要修改成 <code> prefix=/usr </code>.
可能还有些零星的修改. 都是一目了然的事情, 不再多说.
===================================================================
??? GTK+ 好像包含很多小的软件包, 我怎么知道哪些是必要的, 以及是否充分?
>>> 以下软件包应该是必要的:
<file-list>
atk.pc
gdk-2.0.pc
gdk-pixbuf-2.0.pc
gdk-win32-2.0.pc
glib-2.0.pc
gmodule-2.0.pc
gobject-2.0.pc
gthread-2.0.pc
gtk+-2.0.pc
gtk+-win32-2.0.pc
pango.pc
pangoft2.pc
pangowin32.pc
</file-list>
至于是否充分, 那要看具体项目的要求.
===================================================================
??? GTK+ 的文档对 autoconf/automake 说的很多. 请问一个典型的流程是什么样的?
>>> 建如下几个文件:
<file-set base="~/workspace">
<file "configure.ac">
AC_INIT(src/main.c)
AM_INIT_AUTOMAKE(gtkhello, 0.0.1)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
AC_SUBST(VERSION)
AC_PROG_CC
AC_OUTPUT(Makefile src/Makefile)
</file>
<file "Makefile.am">
SUBDIRS = src
</file>
<file "src/main.c">
#include <config.h>
#include <gtk/gtk.h>
int main(int argc, char *argv[])
{
GtkWidget *window;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Hello, GTK+");
g_signal_connect(G_OBJECT(window), "destroy",
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
</file>
<file "src/Makefile.am">
gtk_cflags = `pkg-config --cflags gtk+-2.0`
gtk_libs = `pkg-config --libs gtk+-2.0`
win32_flags = -mno-cygwin -mms-bitfields
bin_PROGRAMS = hello
hello_SOURCES = main.c
hello_CFLAGS = -Wall $(gtk_cflags) $(win32_flags)
hello_DEPENDENCIES =
hello_LDADD = $(gtk_libs) $(win32_flags)
</file>
</file-set>
然后执行如下命令:
<cmd>
cd ~/workspace
aclocal
autoheader
touch NEWS README AUTHORS ChangeLog
automake --add-missing --copy
autoconf
/configure
make
</cmd>
如果这个程序能够正常运行, 那你的开发环境就基本配置好了.
===================================================================
??? GTK+ 的应用项目一般都比较庞大, 可能需要做成 shared/dll 库. 请问一个
典型的 shared/dll 库的开发流程和配置是什么样的?
>>> 建立下面这些文件:
<file-set base="~/workspace">
<file "configure.ac">
AC_INIT(src/main.c)
AM_INIT_AUTOMAKE(dll-1st, 0.0.1)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
AC_SUBST(VERSION)
AC_PROG_CC
AM_PROG_CC_STDC
AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL
AC_C_CONST
AC_OUTPUT(Makefile src/Makefile)
</file>
<file "Makefile.am">
SUBDIRS = src
</file>
<file "src/hello.h">
extern int hello(const char *who);
</file>
<file "src/hello.c">
#include <stdio.h>
#include "hello.h"
int hello(const char *who)
{
printf("Hello, %s!\n", who);
return 0;
}
</file>
<file "src/main.c">
#include "hello.h"
int main()
{
return hello("World");
}
</file>
<file "src/Makefile.am">
lib_LTLIBRARIES = libhello.la
libhello_la_SOURCES = hello.c
libhello_la_LDFLAGS = -no-undefined -version-info=0:0:0
include_HEADERS = hello.h
bin_PROGRAMS = hello
hello_SOURCES = main.c
hello_LDADD = libhello.la
</file>
</file-set>
然后用命令:
<cmd>
cd ~/workspace
aclocal
autoheader
libtoolize --copy
touch NEWS README AUTHORS ChangeLog
automake --add-missing --copy
autoconf
/configure
make
</cmd>
这个例子没有涉及 GTK+, 但是也足够说明问题. 如果要考虑 GTK+ 的话, 只需要
在 Makefile.am 当中加一些 CFLAGS, LIBS 或 LDADD 而已.
===================================================================
??? 一个项目涉及的 dll 多了, 相互关系就比较难以掌握, 请问有什么办法可以
了解 dll 之间的调用关系吗?
>>> <cmd> cygcheck prog.exe </cmd>
这个命令对 dll 也可以用.
===================================================================
??? 有一些供开发者参考的文档, 能否包括在软件包中发布, 但是并不安装?
>>> 在 Makefile.am 中使用:
<code>
dist_noinst_DATA = document.file
</code>
就讲这么多了. 本人水平有限, 错漏之处在所难免, 欢迎拍砖.
<the-end/>
--
支持公民自主,反对为民作主,更反对代民作主。
支持公民平等,反对城市特权,更反对党派特权。
支持守法治国,反对以法治国,更反对以德治国。
支持法权独立,反对行政干预,更反对军权干预。
呼吁人大废除宪法第一条部分人高于其他人的歧视条款,尽快建立独立于行政的
司法体系,实现人人平等、依法共和的现代公民社会。 请一起采用本签名档。
[m[1;31m※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 61.52.247.254][m |
|