[ 英文 ]

在微软 Windows 上使用 gtkmm

下载

这里有为 Windows 准备的gtkmm安装程序。从版本2.22开始,也提供64 位版本

安装程序的说明

gtkmm-win32-devel-*.exe 包含了gtkmm、libxml++、libglademm它所依赖的库的dll文件,还有头文件、导入库和文档。这些是在Windows上来编译你的使用gtkmm的应用或库所必需的。同样,你也需要MinGW 或者微软Visual C++ 来进行编译。

gtkmm-win64-devel-*.exe 包含了使用 mingw-w64 或 MSVC 的 x64 目标平台进行构建的 64 位版本同样的这些内容。

使用安装程序

使用运行时环境非常简单,只要运行安装程序,并且确保“在PATH环境变量中添加gtkmm运行时路径”被选中即可。这个选项将会帮助Windows定位到gtkmm的dll文件。如果你确定知道自己在做什么,也可以不选择这个选项。这可能在需要有多个gtkmm安装到系统中时比较有用。比如,同时有运行时库和开发库dll,而你希望通过手动的设置PATH环境变量来选择到底使用哪个gtkmm的库文件。安装之后,你应该可以运行使用gtkmm的程序了。

在执行安装程序时需要注意一个问题,如果你有意使用 MinGW(如使用NetBeans类的非MSVC环境),那么安装路径是不可以包含空格的。比如,安装到 C:\Program Files\gtkmm 就是一个坏主意。这是因为MinGW编译时所需要使用的 pkg-config 包含了一个 bug。请看 邮件列表中的一个文章

要使用开发环境,你需要知道你打算使用哪一个编译器来编译你的代码。gtkmm 支持 MinGW-W64(需要注意的是,虽然名字叫 MinGW-W64,但是这个项目也提供构建32位可执行文件的工具集) 和 Visual C++ 2005 (及以后的版本)。但是更早期的 Visual C++ 就不支持了,而且很可能也不会正常工作。

安装程序包里面包含了 GTK+ 运行时和相关依赖,还有 GTK+ 的头文件、导入库和文档。所以要使用gtkmm,你不需要再安装其它的东西了。

所有的 DLL 都安装到了安装目录的 bin 下面。额外的 DLL 安装到了 redist 下面。这些文件是当你要发布你的应用程序时所需要一同发布的文件。详细的信息请看后面的“再发布”部分。

MinGW DLLs

如果你使用 MinGW 构建你的应用程序,那么你需要前缀为 lib 的 DLL 文件,如 libgtkmm-2.4-1.dll。

MinGW DLL 文件是使用 MinGW-W64 32 位64 位 工具集构建的。我们不能保证其它版本的 g++ 可以和这些二进制文件一同工作,但是如果它们配置为使用相同 ABI (如 SJLJ stack unwinding)的话,它们有可能没有问题。如果您使用了其它版本的 GNU 编译器,无论是好的还是坏的经历,都请您告诉我们。

安装程序安装的 DLL 文件包含了调试符号信息,这对于使用 gdb 调试你的应用程序非常有用。

MSVC++ DLLs

没有"lib"前缀的DLL文件,比如 gtkmm-vc80-d-2_4.dll 是给 MSVC++ 开发使用的 DLL。这些 DLL 的命名规则是

  • "模块"-"编译工具"-("d"-)"ABI 版本".dll
  • "模块" 是指DLL包含的库(如glibmm, cairomm或gtkmm)
  • "编译工具" 是指编译该DLL的编译器(也意味着运行时链接的对象)。
  • "ABI 版本" 是指库的 ABI 版本。注意,不是库版本,而是库的ABI(二进制应用程序接口)的版本。
  • "d" 在"编译工具"和"ABI 版本"之间,用以表明这是 Debug 版本。当使用 MSVC++ 编译 Debug 版本时,需要使用它们。而在 Release 编译时,需要使用那些没有"d"的DLL。

用MSVC++ 2005编译的MSVC++ DLL,即toolset=vc80的,它们链接到运行时MSVCR80.DLL / MSVCP80.DLL; MSVC++ 2008,即toolset=vc90,的DLL是链接到MSVCR90.DLL / MSVCP90.DLL; MSVC++ 2010,即toolset=vc100,的DLL是链接到MSVCR100.DLL / MSVCP100.DLL。

MSVC++ 发布的 DLL 对于运行时和开发来说都一样。

GTK+ DLLs

对于 GTK+ 及其依赖的库 (它们大多数都不是以 *mm 结尾,除了 libsigc-2.0.dll 和 xml++-"toolset"-2_6.dll),上述提及的命名规则并不适用。每一个库只有一个对应的 DLL,但是它对 MinGW 和 MSVC++ (Debug 和 Release Target) 都可以工作,因为它们是 C 库,而不是 C++库。

使用 MinGW

要使用 MinGW 构建你的应用程序,我们推荐你使用 MSYS shell。通过 MSYS,你可以像在 Unix 里面那样编译你的程序,比如,g++ foo.cc -o foo `pkg-config --cflags --libs gtkmm-2.4`

你当然也可以使用普通的 Windows 命令行来编译,但是反引号的语法会无法工作,所以你需要单独的运行 pkg-config 然后手工的修改其内容。

安装程序仅提供原生的 Windows DLL 文件,而不提供 Cygwin DLL 文件。欢迎提供关于怎样使用 cygwin 来构建原生的 gtkmm Windows 应用程序的信息。

使用 MSVC++ (微软 Visual Studio)

下列只是粗略的介绍如何在 MSVC++ 中设置并且构建 gtkmm 应用程序。更相信的信息请见在微软 Visual C++ 中使用 gtkmm 页面。

要用MSVC++编译你的程序,通过菜单 "查看(View)->属性管理器(Property Manager)"打开"属性管理器",然后右键点击 Debug 目标,选择"添加现有属性页(Add existing property sheet)",然后定位到 gtkmm 的安装目录下的 MSVC 目录,选择与你的Visual Studio 版本相对应的 .vsprops 文件(或MSVC 2010的 .props 文件)。

MSVC++ 2005的用户应该使用 gtkmm-vc80-d-2_4.vsprops,MSVC++ 2008的用户,应该使用 gtkmm-vc90-d-2_4.vsprops,而MSVC++ 2010的用户,应该使用 gtkmm-vc100-d-2_4.vsprops。然后对 Release 目标做同样的事情,不过需要注意的是,Release 版本对应的 .vsprops 是那些没有"-d"的文件,带"-d"的都是对应于Debug的。另外需要注意的是,不应该使用 gtkmm-2.4.vsprops 和 gtkmm-2.4d.vsprops,只是为了兼容性而把它们放在这里,这样在使用MSVC编译那些还是用它们的项目时,可以找到它们。

为了防止在 MSVC++ 2005 使用 Debug 版本时出现的随机崩溃,请到 "工程(Project) -> $MyProject 属性(properties)"中,确保"Debug"是激活的(在左上角),然后到"配置属性(Configuration Properties)=>C/C++=>代码生成 (Code generation)"中,选择"Multi-threaded Debug DLL"作为运行时库。这是因为你的程序需要使用与gtkmm(debug) DLL编译相同的库。

你也许也希望将 "链接器(Linker)=>调试(Debuggin)"中的"生成Debug信息(Generate Debug Info)"设置为"是",这样可以调试你的程序。这在MSVC++ 2005中无论是新建的还是空的工程,这都不是Debug的默认设置。这一点在 MSVC++ 2008 和 MSVC++ 2010 中已经修正了。

要想避免Visual Studio中的 一个编译器 Bug,需要给编译器传递一个 /vd2 的参数。如果你使用的是上面提到的属性页(property sheet),那么这个已经自动的帮你选上了。但是如果你不是在用属性页(Property sheet),那么你需要记住设置这个东西。

更新

当 gtkmm 的新版本发布时,你只需要执行新的 gtkmm 安装程序来更新你的 gtkmm 安装。安装程序会自动检测之前的 gtkmm 版本,并且先将其卸载。

安装程序的副作用

安装程序除了将文件和目录复制到硬盘上之外,还做了如下的事情:

  • 设置了 GTKMM_BASEPATH 环境变量。这用来帮助 MSVC 属性页(property sheets)定位 gtkmm 的头文件和库文件。

  • 将 gtkmm DLL 文件的路径添加到 PATH 环境变量。这是帮助使用 gtkmm 的程序定位所需的 gtkmm DLL文件并且使之可以运行。

  • 在注册表中添加 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\gtkmm 键和一些子键。这是为了让“添加/删除程序”窗口中可以出现 gtkmm 的相关项。

  • 在注册表中添加 HKEY_LOCAL_MACHINE\Software\gtkmm 键。这样卸载程序可以找到 gtkmm 安装到什么位置了。

  • 在注册表中添加 HKEY_CURRENT_USER\Software\gtkmm 键。这个可以令 gtkmm 安装程序可以知道更新的时候应该使用哪种语言。

对于用户本地安装来说,注册表的键是存放于 HKEY_CURRENT_USER 而不是 HKEY_LOCAL_MACHINE。

静默安装

可以使用下列选项进行静默安装 (不需要用户干预的安装,使用 /S 标志):

  • /D=GTKMM_PATH: 在 GTKMM_PATH 中设置安装路径.

  • /SET_ENVVARS: 如果设置该标记,gtkmm DLL 文件的路径将会被添加到 PATH 环境变量。
  • /ALLUSERS: 安装给所有用户而不是当前用户。

下面要提到的主要是关于完整性。当你发布你的程序的时候,我们建议随着你的应用程序一起发布所需的 gtkmm 文件,而不是去运行 gtkmm 安装程序,因为这样更不容易出错,而且对最终用户也更方便。下面一节会讲述随你的应用再发布 gtkmm 所需要的文件。

再发布

对于在没有安装过 GTK+ 或 gtkmm 的计算机上要在安装你的程序后可以立即运行,你需要随着你的应用程序安装下列文件,可以使用安装程序来安装。我们建议你保持安装好的文件结构,这样 GTK+ 可以正确的找到它所需要的配置文件和相应的模块。

这意味着你将会在软件包顶级目录有 bin/、etc/、lib/ 和 share/ 文件夹。因为所有的 DLL 都在 bin/ 中,所以这也是你的应用程序可执行文件应该在的位置。所以,在目标的机器上,根据所安装的目录,也许最终会是 C:\Program Files\YourApplication\bin\YourApplication.exe。大多数 Windows 上的 GTK+ 程序都是这么做的,比如 GIMP。

当再发布你的应用程序的时候,请使用 redist/ 目录下的 DLL 文件,而不要使用 bin/ 目录下的文件。因为这些 redist/ 目录下的文件已经去除了调试符号信息,这样文件的大小会更小。同样,编译这些文件的时候使用了 "-O2" 选项,这意味着已经针对速度进行了优化。而在 bin/ 目录下的文件则使用 "-O0 -g" 选项编译,因此是为调试准备的。调试那些已被优化的代码经常让 gdb 产生混乱。当你使用 MSVC++ 而不是 MinGW 时,MSVC++ 的 gtkmm 的 DLL 文件是在 bin/ 目录下,而不是 redist/ 目录下。这是因为在 IDE 中运行调试或发布版本都是很常见的,所以所有的 DLL 文件需要在 PATH 中。

请不要把 DLL 文件安装到全局的系统路径中,比如 C:\Windows\System32。因为 GTK+ 需要在运行时根据 GTK+ DLL 文件所在位置定位所需的文件,你也许会需要安装其它文件,比如模块 (图像加载器、输入模块等) 或主题设置到同样的路径。而且,如果两个不同的应用程序同时这么做,那么卸载其中一个程序时必须确保文件依旧在 System32中,否则另一个程序将无法运行。况且,历史已经证明新版本的 Glib 或 GTK+ 的 DLL 库文件并不总是和以前的文件相兼容,即使它们试图保持兼容。当然,这个问题正在改进。

gtkmm

为了 gtkmm 你需要所有这些文件:

  • bin\libgtkmm-2.4-1.dllbin\gtkmm-vc80-2_4.dllbin\gtkmm-vc90-2_4.dllbin\gtkmm-vc100-2_4.dll (取决于你是使用 MinGW、MSVC++ 2005、MSVC++ 2008还是MSVC++ 2010 构建你的应用程序)

  • bin\libgdkmm-2.4-1.dllbin\gdkmm-vc80-2_4.dllbin\gdkmm-vc90-2_4.dllbin\gdkmm-vc100-2_4.dll

  • bin\libpangomm-1.4-1.dllbin\pangomm-vc80-1_4.dllbin\pangomm-vc90-1_4.dllbin\pangomm-vc100-1_4.dll

  • bin\libatkmm-1.6-1.dllbin\atkmm-vc80-1_6.dllbin\atkmm-vc90-1_6.dllbin\atkmm-vc100-1_6.dll

  • bin\libcairomm-1.0-1.dllbin\cairomm-vc80-1_0.dllbin\cairomm-vc90-1_0.dllbin\cairomm-vc100-1_0.dll

  • bin\libgiomm-2.4-1.dllbin\giomm-vc80-2_4.dllbin\giomm-vc90-2_4.dllbin\giomm-vc100-2_4.dll

  • bin\libglibmm-2.4-1.dllbin\glibmm-vc80-2_4.dllbin\glibmm-vc90-2_4.dllbin\glibmm-vc100-2_4.dll

  • bin\libsigc-2.0-0.dllbin\sigc-vc80-2_0.dllbin\sigc-vc90-2_0.dllbin\sigc-vc100-2_0.dll

GTK+ 运行时文件

这是 gtkmm 所必需的,所以你也需要所有这些文件。更详细的关于这些库提供了什么功能的介绍在 GTK+ for Windows 页面。

  • bin\libgtk-win32-2.0-0.dll

  • bin\libgdk-win32-2.0-0.dll

  • bin\libgdk_pixbuf-2.0-0.dll

  • bin\libpango-1.0-0.dll

  • bin\libpangocairo-1.0-0.dll

  • bin\libpangoft2-1.0-0.dll

  • bin\libpangowin32-1.0-0.dll

  • bin\libatk-1.0-0.dll

  • bin\libcairo-2.dll

  • bin\libgio-2.0-0.dll

  • bin\libgmodule-2.0-0.dll

  • bin\libgobject-2.0-0.dll

  • bin\libgthread-2.0-0.dll

  • bin\libglib-2.0-0.dll

  • bin\libexpat-1.dll

  • bin\libfontconfig-1.dll

  • bin\libpng14-14.dll

  • bin\intl.dll (32 bit) or bin\libintl-8.dll (64 bit)

  • bin\freetype6.dll (32 bit) or bin\libfreetype-6.dll (64 bit)

  • bin\zlib1.dll

  • etc\pango\pango.modules:所注册的 pango 模块的列表。

  • bin\libgcc_s_sjlj-1.dll (仅在使用 MinGW gtkmm DLL时候)

  • etc\gtk-2.0\gtk.immodules:可用的 GTK+ 输入模块列表。

  • etc\gtkrc:包含了要使用的 GTK+ 的主题 ("MS-Windows" 主题)。

  • lib\gtk-2.0\2.10.0\* (所有这个目录下的文件和目录):这些是在运行时加载的 GTK+ 模块,如图像加载器和主题引擎。

  • share\themes\MS-Windows\gtk-2.0\gtkrc:MS-Windows GTK+ 主题的设置。

  • share\locale\*:Glib 和 GTK+ 的多种语言的翻译。

libxml++

如果你的程序使用 libxml++,那么你额外需要:

  • bin\libxml++-2.6-1.dllbin\xml++-vc80-2_6.dllbin\xml++-vc90-2_6.dllbin\xml++-vc100-2_6.dll

  • bin\libxml2-2.dll

libglademm

如果你的程序使用了 libglademm,那么你会额外需要:

  • bin\libglademm-2.4-1.dllbin\glademm-vc80-2_4.dllbin\glademm-vc90-2_4.dllbin\glademm-vc100-2_4.dll

  • bin\libglade-2.0-0.dll

  • bin\libxml2-2.dll

改造

要改造gtkmm的二进制文件或者重新创建安装程序,请看 在Windows上构建gtkmm

Chinese/gtkmm/MSWindows (last edited 2012-09-21 16:10:04 by JiaYanwei)