打造高效的工作环境(番外篇1): windows/linux钗黛双收

前两篇文章基本上都在对Windows进行各种吐槽,最近Win8消费者预览版的出现更是让我对我的吐槽充满了信心——微软已经堕落到需要靠五颜六色的砖块来吸引眼球的地步了。我虽然没有亲身体验过Metro UI,但是我依然坚持,Metro UI是个无比糟糕的设计,一个彻头彻尾的倒退。颠覆传统、回归本原?是回归到Windows 3.x时代吗?一眼望去,Metro UI似乎很绚烂,像焰火漫天的夜空,但是稍不留意,作为使用者的我们就很容易迷失在图标的海洋里面。在我的印象中,直角化的图案一直是设计里的禁忌之一,而为了弥补这个缺憾(或者说是对传统的颠覆),Metro采用了大量的颜色来填充一个又一个的砖块,使得这些砖块能够不至于“迷失自我”。

我认为一个良好的使用界面应该要有统一的风格,至少不能有太多的颜色,而不是像一个调色版一样令人眼花缭乱;圆角在舒适的用户体验中是不可缺少的,可惜苹果在前,*nix在后,微软在UI设计方面的创新已经没有太多可选的余地,只能走一个极端来玩一场赌博;前两年的Ribbon界面应该是Metro设计的一个铺垫,我认为Ribbon确实是个不错的创新,能够将大量的MS Office小白用户从繁杂的菜单中解放出来,但是Metro实在太过了;最苦的应该是Windows开发者,唉,三年一小改、五年一大改是微软的一贯风格。

不过这些对我都不重要,重要的是我相信,即便我对Windows吐槽了这么多,许多朋友还是小心翼翼,不敢投入Linux的怀抱。正常,因为Linux的门槛确实不低,加上一大堆的概念和思维的转变,再补上如百花从般绚烂多彩的发行版和如满天繁星般闪亮的各种大小bug瑕疵,足以令80%的初学者望而却步。而我又不想让我的文章太过小众(我在开篇中说过,这一系列的文章主要面对以Linux系统为工作环境的初级Coder,兼带高级电脑使用者)。因此,我总结了一些变通的方法,让你可以在你的Windows系统上无痛地尝尝Linux的鲜。

本文主要针对那些想要尝试下Linux但又怕损坏自己Windows的工作平台的同志。当然,本文的重点还是命令行环境的建立,因为熟练掌握命令行是高效使用Linux的必由之路。而至于图形界面,由于Windows Explorer的顽固存在,Windows下的GUI没什么可折腾的。除了虚拟机,似乎没有什么特别完美的办法能够在不切换系统的情况下体验Linux的图形界面。

本文主要介绍一些简单易行的方法手段,能够在Windows下建立一套相对完整的Linux命令行实验环境,为后面系列的文章奠定一个基础,并借此扩大下本系列文章的“打击面”。

1 Cygwin

  • What:通俗的讲,Cygwin是Windows上的一个模拟软件,最初是由Cygnus Solutions公司开发的。

    • Cygwin通过对Windows API的整合封装模拟出一套POSIX API。有了这套基础性的POSIX API(就是Linux C编程的什么fork/wait啊、signal啊、open/close啊这套东西),再加上一套合适的交叉编译器(就是大名鼎鼎的GCC了),就有了在Windows上模拟运行*nix软件的基础。
    • Cygwin本身也包含了很多常用的自由软件,包括核心的bash、coreutils、findutils等,配合Cygwin/X这个东西,甚至可以直接运行许多X Windows上的软件,包括Emacs,gvim等等。
  • How:1
  • Pros:傻瓜式安装;可以和host文件系统方便互通。
  • Cons:没有类似于apt-get这种杀手级的软件包管理工具,安装一些额外的软件颇费周折,而且官方软件库更新较慢。
  • 可用性:3星。

    • 很多以linux为推荐运行平台的软件也支持在Cygwin上开发测试,比如hadoop
  • 结论:如果只是看看Linux的命令行长什么样子,那么本文看到这里就可以了。

2 SUA

  • What:SUA是Windows的一个subsystem,提供一些基本的POSIX API,在此基础上提供一些简单的*nix程序,诸如vi、ksh、csh、ls、cat等。
  • How:@see 这里
  • Pros:SUA是微软自家的东西。
  • Cons:除了Pros之外都是缺点。

    • 软件稀少,版本低无法扩展是致命伤。我只用过一次就甩了。
  • 可用性:1星,玩具而已,未见日常使用
  • 结论:了解即可

3 虚拟机

  • What:虚拟机大概是最常用也最方便的方式了吧,虽然虚拟机本身的水非常深。我第一次接触虚拟机的概念还是在大一上,那个时候自己还在熟悉怎样更好更快地安装Windows操作系统,Virtual PC自然而然就成了我的好伙伴,而我也为能在Virtual PC下顺利安装一个MS DOS 7.1感到欣喜不已。后来接触到了VMware,它有两个显著的特性,一大特性是强,另一大特性就是卡。VirtualBox是我的最爱,轻量快速,乃居家旅行杀人越货必备良品。
  • How:准备10G硬盘空间就OK。

    • VirtualBox有一些非常给力的特性:

  • Pros:虚拟机能够给你100%原生的Linux观感和体验,而且使用过程中无毒无害,更不用担心将系统不小心搞挂,配合上VirtualBox的文件共享功能和全屏功能,再加上一个稍微给力点的电脑2,有时候能够达到以假乱真的效果
  • Cons:性能上还是有些损失的;除了VMware,其余虚拟机软件好像没有特别方便的方法支持bridge network,有时候很不方便。
  • 可用性:4星
  • 结论:VirtualBox乃居家旅行杀人越货必备良品。

4 Colinux

  • What:Cooperative Linux, abbreviated as coLinux, is software which allows Microsoft Windows and the Linux kernel to run simultaneously in parallel on the same machine. 简单而言,coLinux和VirtualBox这类虚拟软件最大的区别在于,coLinux运行的linux系统是何Windows宿主系统共享系统资源的3,因此其性能对比VirtualBox这类虚拟机软件要好很多。
  • How:coLinux本身的安装还是要非一番周折的。幸运的是,万能的社区提供了两个打包好的一键安装方案,那就是andLinuxTopologilinux。我只用过andLinux,推荐。

    • coLinux可以通过samba和windows系统共享文件。
    • 可以将coLinux做成随系统启动的一个服务,并且在coLinux里面开始sshd进行,之后用putty这类软件连接ssh,就可以全面享受linux命令行运指如飞的畅快了。
    • 如果你以前没有用过apt-get这个程序,这次不要错过,因为集中化的软件管理机制是linux(debian/ubuntu的apt-get)的杀手级特性,也是我的最爱。
  • Pros:除了Cons都是Pros。
  • Cons:None。
  • 可用性:5星。
  • 结论:这是我大三暑假在华数淘宝实习时跟一位高手偷师过来的,最爱,强烈推荐。

5 其余解决方案

除了以上谈到的,KDE for Windows是在Windows上体验KDE桌面环境的一种可行的方案,虽然其目前bug依然多多;如果你玩腻了以上所有,想装个真家伙,又怕手生一不小心误删重要文件,那么Ubuntu Wubi应该是一个不错的解决方案。如果你已经开始讨厌Ubuntu Wubi了,那么恭喜你,你已经成功地被我忽悠,进入*nix的精彩世界,just enjoy it。

Footnotes:

1 什么?你不会问我Cygwin要怎么安装吧?

2 不够2G内存的同志赶紧去花钱加内存吧,当然,有双屏更好。

3 coLinux运行的linux系统需要对内核进行特殊的修改。当然,关于这种修改本身和coLinux背后的原理已经远远超出了本文讨论的内容和本人的技术水平,还请高手不吝赐教。

在 MS Windows 中搭建 GTK+ 开发环境

GTK+ 是一套跨平台的图形用户界面(Graphical User Interface)开发工具包,按 LGPL 许可协议发布的。此地介绍一下 GTK+ 开发工具包在 MS Windows 上的安装配置。

〇、预备工作

由于 GTK+ 是由 C 语言开发,因此要开发 GTK+ 应用程序,首先需要配置好 C 编译环境。在 MS Windows 平台,C 编译器的选择很多,主流的有 MSVC、GCC 的移植版本 MinGW 与 Cygwin。由于 GTK+ 是 GNU 项目,因此,这里推荐使用 GNU 的编译器,当然并不是说不能使用其他 C 编译器,这完全取决于个人喜好。MinGW 的下载与安装参考其官方网站 http://www.mingw.org 的说明。由于 MinGW 最初是 32 位,近年来,TDM-GCC 推出了 MinGW 的 64 位版本,详见其官方主页 http://tdm-gcc.tdragon.net/。至于 Cygwin,请到它的官方网站 http://www.cygwin.com/ 了解详情。在 Cygwin 与 MinGW 两者之间,一般推荐 MinGW 作为 C/C++ 编译工具链,除非需要在 MS Windows 平台上开发 Unix/Linux 应用程序。当然,在 MS Windows 平台上开发大型应用程序,少不得使用集成开发环境。集成开发环境也有很多选择,例如 MSVS、Code::Blocks、QtCreator 等。下面的介绍中使用的 Code::Blocks,请到其官网 http://codeblocks.org 下载最新版本(留意 Code::Blocks 的安装包是否已带有 MinGW)。

一、下载与配置 GTK+ 开发包

在 MS Windows 中安装 GTK+ 有多种选择,可利用 Cygwin 或 MinGW 工具自行由源码编译 GTK+ 工具包,不过要解决 GTK+ 依赖,工程相对浩大。目前,GTK+ 官方推荐利用 MSYS2(官网地址为 http://msys2.github.io)提供的包管理器 pacman 来自动完成 GTK+ 的编译与安装。这里直接利用预编译的 GTK+ 集成开发包来完成它们安装。虽然集成开发包有些陈旧,但好处也是明显地,它包含了所有开发与运行 GTK+ 应用程序的头文件与库文件。需要 GTK+ 2 的用户,可到 http://ftp.gnome.org/pub/GNOME/binaries/ 下载 32 位的集成开发包 gtk+-bundle_2.24.10-20120208_win32.zip 或 64 位的集成开发包 gtk+-bundle_2.22.1-20101229_win64.zip;需要 GTK+ 3 的用户,可到 http://win32builder.gnome.org/ 下载 32 位的集成开发包 gtk+-bundle_3.10.4-20131202_win32.zip 或 64 位的集成开发包 gtk+-bundle_3.10.4-20131202_win64.zip。它们的安装非常简单,只需要将这些压缩包解压缩即可,一般建议将它们安装磁盘的根目录(如 C:\GTK+-2.12C:\GTK+-3.10),但不推荐安装到 MS Windows 的应用程序文件夹。为了能够使用 GTK+ 提供的 pkg-config 来配置 GCC 的编译、链接选项,还需配置环境变量 PATH。只需在 MS Windows 的文件管理器中鼠标右击 “My Computer” -> “Properties” -> “Advanced system settings” -> “Environment variables”,接着双击 “System variables” 页面中的 PATH 行,将 GTK+ 目录中的 bin 路径(如 ;C:\GTK+-2.12\bin;C:\GTK+-3.10\bin)添加到原 PATH 变量的末尾。命令行操作也可完成 PATH 的设置,也即打开命令行窗口(CMD.exe),然后执行

> setx PATH "%PATH%;C:\GTK+-2.12\bin"

或者

> setx PATH "%PATH%;C:\GTK+-3.10\bin"

设置好环境变量 PATH 之后,可选择性的做下述设置

> pango-querymodules > C:\GTK+-2.12\etc\pango\pango.modules
> gdk-pixbuf-query-loaders > C:\GTK+-2.12\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache
> gtk-query-immodules-2.0 > C:\GTK+-2.12\lib\gtk-2.0\2.12.11\immodules.cache

二、开发环境的测试与 Code::Blocks 的整合

在正式开始 GTK+ 开发工作之前,要确保 GTK+ 环境配置的正确性,为此还需做一些简单的测试。前述 GTK+ 集成开发包带有 GTK+ 的开发演示文档,可到相应目录查找。此地,以命令行方式演示一个由 GTK+ 2 开发简单应用的例子:

> notepad.exe hellogtk.c

#include 

int main(int argc, char *argv[])
{
    GtkWidget *window;
    gtk_init(&argc, &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(G_OBJECT(window), "destroy",
    G_CALLBACK(gtk_main_quit), NULL);

    gtk_widget_show(window);
    gtk_main();
    return 0;
}

现在在 MinGW Shell 中执行

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

一切正常的话,会在 hellogtk.c 所在目录生成一个可执行文件 hellogtk.exe,鼠标双击运行它。

要开发一个大型的 GTK+ 程序,除了使用 Makefile 管理源代码文件之外,使用集成开发环境是方便的。下面以 Code::Blocks 作为集成开发环境演示如何进行 GTK+ 的开发工作,而这仅需搞清楚如何在 Code::Blocks 中配置 GTK+ 的库文件与头文件路径,当然有很多方法达到这个目的,这里只给出针对 GTK+ 工程相关的配置方法。为此,先按下述操作新建一个 GTK+ 工程:启动 Code::Blocks,点击 “File” -> “New” -> “GTK+ Project” 创建一个 GTK+ 2 项目。下面点击该工程对应的菜单 “Project” -> “build options” 子标签。下面从简到烦介绍三种在 GTK+ 工程属性中配置 GTK+ 开发环境的方法:

1、利用 pkg-config 直接设置编译选项与链接选项

由于 pkg-config 已在 PATH 中,故而 GTK+ 的编译选项与链接选项的设置非常简捷,只需在 “Project build options “-> “Compiler settings” -> “Other Compiler options” 中增加编译选项设置 pkg-config --cflags gtk+-2.0;再在 “Project build options” -> “Linker settings” -> “Other linker options” 增加链接选项为 pkg-config --libs gtk+-2.0

2、利用 pkg-config 的输出设置编译选项与链接选项

2.1、设置编译选项。先在命令行窗口(CMD.exe) 中执行

> pkg-config --cflags gtk+-2.0
-mms-bitfields -IC:/GTK+-2.12/include/gtk-2.0 -IC:/GTK+-2.12/lib/gtk-2.0/include -IC:/GTK+-2.12/include/atk-1.0 -IC:/GTK+-2.12/include/cairo -IC:/GTK+-2.12/include/pango-1.0 -IC:/GTK+-2.12/include/glib-2.0 -IC:/GTK+-2.12/lib/glib-2.0/include -IC:/GTK+-2.12/include/libpng12

然后开启 Code::Blocks,将 -mms-bitfields -IC:/GTK+-2.12/include/gtk-2.0 -IC:/GTK+-2.12/lib/gtk-2.0/include -IC:/GTK+-2.12/include/atk-1.0 -IC:/GTK+-2.12/include/cairo -IC:/GTK+-2.12/include/pango-1.0 -IC:/GTK+-2.12/include/glib-2.0 -IC:/GTK+-2.12/lib/glib-2.0/include -IC:/GTK+-2.12/include/libpng12 拷贝到 “Project build options” -> “Compiler settings” -> “Other Compiler options”;

2.2、设置链接选项。在命令行窗口(CMD.exe) 中执行

> pkg-config --libs gtk+-2.0
-LC:/GTK+-2.12/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl

然后将 -LC:/GTK+-2.12/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl 拷贝到 “Project build options” -> “Linker settings” -> “Other linker options”。

3、将搜索路径、编译选项、链接选项分开设置

3.1、设置编译选项。在 “Project build options” -> “Compiler settings” -> “Other Compiler options” 加入编译选项 -mms-bitfields

3.2、设置链接选项与库文件。在 “Project build options” -> “Linker settings” -> “Link libraries” 中将 GTK+ 2 库的所有库文件(动态库或者静态库)加入,也即点击 ADD 按钮后弹出的文件选择对话框中将 atk-1.0cairogdi32gdk-win32-2.0gdk_pixbuf-2.0gio-2.0glib-2.0gmodule-2.0gobject-2.0gtk-win32-2.0intlpango-1.0pangowin32-1.0pangocairo-1.0 逐一加入;在 “Project build options” -> “Linker settings” -> “Other linker options” 中加入链接选项 -mwindows

3.3、设置搜索目录。在 “Project build options” -> “Search directories” -> “Compiler” 子标签中加入 GTK+ 2 的头文件路径:C:\GTK+-2.12\include\atk-1.0C:\GTK+-2.12\include\cairoC:\GTK+-2.12\include\glib-2.0C:\GTK+-2.12\include\gtk-2.0C:\GTK+-2.12\include\libpng12C:\GTK+-2.12\include\pango-1.0C:\GTK+-2.12\lib\glib-2.0\includeC:\GTK+-2.12\lib\gtk-2.0\include。一般来说就这些,如果安装了新的库再加。若上一步的 “Link libraries” 已带有绝对路径,就不必设库文件的搜索路径了;如若不然,还需在 “Project build options” -> “Search directories” -> “Linker” 子标签中加入库文件路径,也即 C:\GTK+-2.12\lib

介绍第三种比较麻烦的配置方法的目的是让那些使用 MSVC 作为编译工具的用户看清楚如何配置 GTK+ 开发环境。

三、GTK+ 程序界面的快速构建工具

Glade 用来为 GTK+ 和 GNOME 程序快速地设计图形用户界面,并自动生成图形界面的 C 源代码。历史上,Glade 有三个版本,不过目前主要的是 Glade2 与 Glade3,推荐使用 Glade3。Glade2 和 Glade3 的主要区别是: Glade2 会自动生成 makefile 等文件,而 Glade3 只是用来生成界面,然后采用 Libglade 和 GtkBuilder 格式调用 .glade 文件,这样的好处是代码和界面完全分开,避免代码的改变又需要重新编译。与 GTK+ 类似,在 MS Windows 中安装 Glade 的方法很多种,如前,此地直接利用预编译的 Glade 工具包。安装方法很简单,到 http://ftp.gnome.org/pub/GNOME/binaries/ 下载安装包 glade3_3.8.1-1_win32.zip 即可,由于 Glade 是来生成布局文件的,因此无须在意是否是 32 位还是 64 位。当然,为了避免在运行时出现依赖错误,也可安装带有完整 GTK+ 库的版本,例如 glade3-3.6.7-with-GTK+.exe。若使用 Libglade 格式的布局文件,还需调用 libglade 库,为此安装 libglade 库,也即到 http://ftp.gnome.org/pub/GNOME/binaries/下载 32 位安装包 libglade-dev_2.6.4-1_win32.zip 或 64 位安装包 libglade-dev_2.6.3-1_win64.zip 即可;并假设 Glade 的安装目录均在 C:\Glade,据此设置环境变量 PKG_CONFIG_PATH,也即在命令行窗口(CMD.exe) 中执行

> setx  PKG_CONFIG_PATH "%PKG_CONFIG_PATH%;C:\Glade\lib\pkgconfig"

接着试试下述命令行

> pkg-config --modversion libglade-2.0

看是否有版本信息输出?若找不到该命令,就需要重启电脑;若有,说明系统变量设置正确。

四、GTK+ 的 C++ 开发包的安装与配置

GTKmm 便是 GTK+ 的 C++ 开发包。与 GTK+ 类似,在 MS Windows 中安装 GTKmm 有多种选择,如前,这里直接利用预编译的 GTKmm 开发包包来完成安装,不过需要注意,它是以 GTK+ 包的安装为前提,要预先配置好 GTK+ 才行。从 http://ftp.gnome.org/pub/GNOME/binaries/ 下载 32 位的 GTKmm 开发包 gtkmm-win32-devel-2.22.0-1.exe 或者 64 位的 GTKmm 开发包 gtkmm-win64-devel-2.22.0-1.exe,然后点击它们安装即可,假设安装目录是 C:\GTKmm-2.22。在使用 GTKmm 之前,还需设置系统变量,打开命令行窗口(CMD.exe) ,执行:

> setx PKG_CONFIG_PATH "%PKG_CONFIG_PATH%;C:\GTKmm-2.22\lib\pkgconfig"

在打开命令行窗口(CMD.exe)中再试试

> pkg-config --modversion gtkmm-2.4

若一切正常,可以简单测试一下 GTKmm 是否正常工作?在 MinGW Shell 中,执行下述命令行

> notepad.exe hellogtkmm.cpp

/*Gtkmm程序的基本头文件,下面用到的两个类就由它定义*/
#include 

int main (int argc, char *argv[])
{
   /* 
   每一个Gtkmm应用程序都必须有这样一个类的实例,并且必需是第一个生成的Gtk对象。
   它对环境进行必要的初始化,需要用 argc 和 argv 两个参数对它进行实例化。
   */
   Gtk::Main app(argc, argv);
   
   /* 定义一个GTK的窗口类,默认地它以可执行程序名作为窗口标题。*/
   Gtk::Window main_win;
   
   /* 显示窗口,并进入监听事件的循环状态,当窗口关闭时返回。*/
   app.run(main_win);
   
   return 0;
}

> g++ hellogtkmm.cpp -o hellogtkmm `pkg-config --cflags --libs gtkmm-2.4`
> hellogtkmm.exe

附录

MS Visual C/C++(MSVC) 是由 Mirosoft 公司在 MS Windows 操作系统开发的 C/C++ 编译器,目前对应的集成开发环境是 MS Visual Studio(MSVS)。因此,开发 GTK+,使用 MSVS 也是一个不错的选择,这里介绍一下如何利用 MSVS(或 MSVC)进行开发工作。

先来说说在命令行环境中测试 GTK+ 开发环境的方法。通常,安装完 MSVS 之后,并不会将 MSVC 的命令行路径加入到系统环境变量 PATH 之中,但 MSVS 带有配置好环境变量 PATH 的 MSVS 命令行提示窗口。因此,要使用 MSVC 命令行,可在启动 MSVS 之后调用 MSVS 命令行提示窗口,也即启动 MSVS -> “Open the Visual Studio Command Prompt”,在打开的命令行窗口中试试 pkg-config 的输出 :

> pkg-config --cflags gtk+-2.0

若一切正常的话,将这些选项保存下来,并删去其中 -mms-bitfields,并在末尾增加 -Dinline= /link /libpath:C:\GTK+-2.12\lib gtk-win32-3.0.lib gobject-2.0.lib。例如编译前述 hellogtk.c,在 MSVS 命令行提示窗口中执行

> cl hellogtk.c -IC:/GTK+-2.12/include/gtk-2.0 -IC:/GTK+-2.12/lib/gtk-2.0/include -IC:/GTK+-2.12/include/atk-1.0 -IC:/GTK+-2.12/include/cairo -IC:/GTK+-2.12/include/pango-1.0 -IC:/GTK+-2.12/include/glib-2.0 -IC:/GTK+-2.12/lib/glib-2.0/include -IC:/GTK+-2.12/include/libpng12 -Dinline= /link /libpath:C:/GTK+-2.12/lib gtk-win32-3.0.lib gobject-2.0.lib

其中 “gtk-win32-3.0.lib gobject-2.0.lib” 是编译 GTK+ 应用程序最少的链接选项要求;更多的链接选项请执行

> pkg-config --libs gtk+2.0

之后,自行添加需要的 .lib 项。

跟以往一样,开发大型程序,还是使用集成开发环境比较好。不过 MSVS 并没有提供 GTK+ 工程向导,因此只能通过在 MS Visual Studio 中新建一个空的 C++ 项目,然后在该项目的工程属性中配置 GTK+ 所需要的编译、链接参数。具体来说,

1、配置头文件搜索目录:鼠标右键新建的 C++ 工程属性->配置属性->C++目录->包含目录,把下述目录 C:\GTK+-2.12\include\atk-1.0C:\GTK+-2.12\include\cairoC:\GTK+-2.12\include\glib-2.0C:\GTK+-2.12\include\gtk-2.0C:\GTK+-2.12\include\libpng12C:\GTK+-2.12\include\pango-1.0C:\GTK+-2.12\lib\glib-2.0\includeC:\GTK+-2.12\lib\gtk-2.0\include 添加进去。

2、配置库文件搜索目录,鼠标右键新建的 C++ 工程属性->配置属性->C++目录->库目录,把 C:\GTK+-2.12\lib 目录添加进去;

3、配置附加依赖项, C++ 工程属性->配置属性->链接器->输入->附加依赖项,把 atk-1.0.libcairo.libgdi32.libgdk-win32-2.0.libgdk_pixbuf-2.0.libgio-2.0.libglib-2.0.libgmodule-2.0.libgobject-2.0.libgtk-win32-2.0.libintl.libpango-1.0.libpangowin32-1.0.libpangocairo-1.0.lib 等项添加进去,注意每项要换行。

要注意,不同的 GTK+ 版本,每个链接项的版本可能不同,请根据 pkg-config 的输出自行调整。

优化jpg图片脚本

在工作中,遇到一些大图,甚至是超大图,对于大于6M的jpg图片,不得不优化一下,大图片的数量非常多,存在于不同数字编号目录里。


这里,要解决几个问题,


一、查找大于6M的jpg图片 我想到了find命令


二、分批处理与终止条件 要处理的图片实在是太多了,命令一运行,不知道连续多少天才能完成


三、备份源图片 复制就行了


四、图片优化程序的选择 必须是命令行的。我找到了jpegoptim,非常不错


五、经过优化的图片还是大于6M怎么办?不再优化!因为再处理的话,图片会严重失真,不符合要求。


六、多台机器同时处理 (未解决,文件锁问题)


 


问题二和三是紧密相连的


先说终止条件,有两种方法去终止这个脚本


1、用户输入要处理的大图数量,如100个,当处理完100个时,自然终止


2、当前处理数量小于用户输入数时,按^+C来终止,并手动把最后处理的一个文件从备份目录剪切到源目录


分批处理问题:以用户输入数为上限( 为何是上限?待处理大图未必有用户输入的那么多)


下次运行脚本时,如果有备份,就不处理已经备份的图片。


至此,全部问题得到解决。


以下附上脚本
#!/bin/bash
# by Daniel Chow @speedup2010
# v2 2012年06月 2日 星期六  2:44:05
# v3 2012年06月 2日 21:41:57
# v4 不知道跑哪去了。
# v5 2012年06月 3日 星期日 14:08:05
# 一次处理 n个大图

#bak_path=/cygdrive/b
#disk_x=/cygdrive/a
bak_path=/cygdrive/d/kingston/disk_b
disk_x=/cygdrive/d/kingston/disk_a
help(){
        echo -e "\033[31m\n\t大哥/大姐,不带这样玩的!!!\033[0m\n\t随便输入个正数吧"
        exit 0
}
if [ $# -eq 1 -a $1 -gt 0 ];then {
        echo -e "\n\t本次最多处理$1个文件"
        echo -ne "\033[31m
  \t欲终止,在显示\033[34mExif\033[31m时,按CTRL+C,\n
  \t并把最后处理的一个文件从备份目录剪切到源目录\n\n"
        echo -ne "\033[32m\t源目录:$disk_x\n
  \t备份目录:$bak_path\n
  \t源目录文件\t->\t备份文件\n"
        echo -ne "\033[0m"
        [ $PWD == $disk_x ] || cd $disk_x
        count=1
        for large_img in `find ????????? -iname "*.jpg" -size +6M -type f`;do {
                while [ ! -f $bak_path/$large_img ];do {
                        chah=${large_img%%/*}
                        [ ! -d $bak_path/$chah ] && mkdir -v $bak_path/$chah
                        cp $large_img $bak_path/$chah -v && jpegoptim --max=60 $large_img && count=`expr $count + 1 `
                        [ $count -gt $1 ]  && break 2
                        }
                done
        }
                        done;
        total_m=`expr $count - 1` && echo -e "\n\t处理了$total_m个文件\n"
        }
else
        help
fi

Cygwin安装及SSH设定教学(下)

  1. 设定环境变数
    3.1 点选【我的电脑】→【右键内容】

    3.2 【进阶】→【环境变数】

    3.3 点选【新增】
    变数名称 : CYGWIN
    变数值 : ntsec tty

    3.4 新增完成后会在,系统变数内看到刚刚所新增的项目。

    3.5 找到Path变数后 点选【编辑】
    在变数值的最后变加上 ;c:\cygwin\bin

    3.6 设定完环境变数后就可,点选桌面上的Cygwin开启

  2. sshd的相关设定
    4.1 下图为开启的画面

    4.2 Cygwin最近所发布,有些会有权限问题。因此这边会建议最后把以下指令都操作一次
    chmod +r /etc/passwd
    chmod u+w /etc/passwd
    chmod +r /etc/group
    chmod u+w /etc/group
    chmod 755 /var
    touch /var/log/sshd.log
    chmod 664 /var/log/sshd.log

    4.3 再来设定ssh-host-config
    输入下列指令
    ssh-host-config
    输入后系统会自动产生一些对象。
    Should privilege separation be used?
    接着询问是否要开启【权限分离】的功能,在其他系统中安装OpenSSH时是自动开启的,因此你可输入【YES】

    4.4 New local account ‘sshd’?
    再来会提示说要建立一个特殊权限帐号,请输入YES。

    4.5
    询问你是否将SSHD作为服物来执行。如此一来不管Cygwin是否有开启,都可以使使用ssh。请输入yes
    Enter the value of CYGWIN for the daemon:[]
    接下来会要求为这个服务输入一个名称,可按enter使用预设的(预设为ntsec)

    4.6 设定好ssh-host-config后,再来就是启动SSH
    net start sshd或 cygrunsrv –start sshd

    4.7 再来设定让Windows本机的帐密和cygwin同步
    mkpasswd -cl > /etc/passwd
    mkgroup –local > /etc/group

    4.8 查询自己目前的身份(以方便之后登入输入的帐号)
    whoami

    4.9 测试看看本机的SSH是否正常
    ssh localhost
    or
    ssh -vvv localhost
    or
    ssh $USERNAME@127.0.0.1
    -v表是把所有细节都显示出来

    看到下面问题请输入YES 是在询问是否要继续连接

    请输入密码(密码为Windows主机登入的密码,如果没有设定的话请设定一组)

  3. 防火墙的设定
    5.1 请到【控制台】→【windows防火墙】→【例外】→【新增连接】

    5.2 名称 : 可自行输入
    连接阜编号 : 22(如果有改port号的话就输入修改的port号)

    5.3 设定完后就会在程序和服务看到刚刚所建立的设定。

    5.4 在来用别台电脑的putty来连线看看是否可以正常登入。

Cygwin安装及SSH设定教学(上)
全文同步于FAQ-BOOK
IT铁人文章分享

Cygwin安装及SSH设定教学(上)


前言 :
在很多时后,会需要用到LINUX但是偏偏就只有WINDOWS主机,因此在这个时后就可以安装Cygwin来做相关的使用。而不用在特意的装一台linux主机。

一、 Cygwin介绍 :
Cygwin是许多自由软体的集合,最初由Cygnus Solutions开发,用于各种版本的Microsoft Windows上,执行UNIX类系统。Cygwin的主要目的是透过重新编译,将POSIX系统(例如Linux、BSD,以及其他Unix系统)上的软体移植到Windows上。Cygwin移植工作在Windows NT、Windows 2000、Windows XP、Windows7、Windows Server 2003及Windows Server 2008上,目前Cygwin由Red Hat等负责维护。
二、安装

  1. 安装cygwin
    1.1 在C:\建立一个cygwin的资料夹

    1.2 到cygwin的官网下载最新的版本http://www.cygwin.com/
    也可直接下载 http://cygwin.com/setup.exe

    1.3 把下载好的setup.exe存放到C:\cygwin

    1.4 点击setup.exe开始安装

    1.5 点选下一步继续

    1.6 选择安装所需程序来源的方法
    Install from Internet : 直接下载所需程序并立即安装
    Download from Internet : 仅下载所需程序而不安装
    Install from Local Directory : 安装所需程序已先储存在个人电脑,不需下载可直接安装。
    在这边我们选择【nstall from Internet】

    1.7 选择所要安装的目的目录
    这边我们直接使用预设路径C:\cygwin。也可点选【Browse】自行更换安装路径
    Install for 为使用者权限选择。建议选择【All Users】

    1.8 选择安装时做为储存下载程序的储存目录
    安装所需的各式种类的程序会先被储存到储存目录中,在这边我们设定为C:\cygwin。

    1.9 选择网路连接的方式
    如果Windows已经是连上网的的状态时,建议选择Direct Connection

    1.10 选择程序来源网站
    这些来源网站都储存安装所需的各类程序。但有时也会遇到对象有问题或是不齐全的情况发生,这边会比较建议选择台湾的ftp或是http做为程序来源的网站。若在安装中出现下载的问题,可重新选择其他的来源在安装一次。

    1.11 正在连接抓取资料中。

    1.12 此为提醒视窗,可直接略过。

    1.13 选择所要安装的套件。
    这边可以点选右上方红框内的View来切换模式

    1.14 点选view后会发现所有套件的名称都会出现,也会依英文字母来排列。

    在这次的安装中我们只安装三样套件
    Admin → cygrunsrv
    Net → openssh
    Editors → vim
    可以在上方红框内输入想要查询的套件名称
    然后找到该套件后点选前方的Skip,使其改变状态。

Net → openssh

Editors → vim

Admin → cygrunsrv

1.15 直接点选下一步。

1.16 显示安装进度,需要一点时间请稍后。

1.17 若在安装过程中出现下图提示。请重新选择来源

1.18 更换来源后点选下一步继续

1.19然后会看到要选取的套件选单,因为刚刚已经选好了,所以就直接下一步就可以。
接着就会继续安装。

1.20 安装完成
安装完成前,可设定是否在桌面产生图示或排列在开始的程序集中。

  1. 设定Windows密码
    2.1 这边会建立使用者能设定一下密码,一来不容易被别人使用。二来才不会到时因没设定密码而要修改设定档,才可连线。所以这边会希望能先建立好密码。
    【我的电脑】→【右键(管理)】

    2.2【本机使用者和群组】→【使用者】→【点选要设定的帐号(如:Administrator)】→【右键设定密码】→

    2.3 在点选修改密码时会有此提省讯息,点选继续就可。

    2.4 请输入所要设定的新密码,点选确定即可。

Cygwin安装及SSH设定教学(下)
全文同步于FAQ-BOOK
IT铁人文章分享

如何移除 Cygwin

Cygwin 并不像一般安装在Windows上的程序一样都会附上自动移除程序,

因此在移除的部份就必须要手动来自行移除了。
Cygwin的移除方式很简单,只需要自行删掉以下的对象就可以了。

1.把在桌面上和开始功能表内的Cygwin捷径

2.在红框2输入regedit ,点选红框3的地方开启。

开启regedit后找到 \HKEY_LOCAL_MACHINE\SOFTWARE\Cygnus Solutions

将Cygnus Solutions直接删除就可以了。

3.再来就是删掉Cygwin安装的目录

4.最后在把Cygwin的暂存档部份移除就行了。

全文同步于FAQ-BOOK
IT铁人文章分享

如何在安装完cygwin后补安装套件

应该会有很多人都有过,在安装好cygwin后,忽然想到有某套件或是某样东西没有装到。但是如果重新安装的话又会浪费很多时间。今天就来简单说一下,在安装完成后如何在补安装套件。

1.先点选原先下载好的安装档,如果此档已经删除或不见的话
请到官网在重新下载一次 : http://www.cygwin.com/
2.点选开启执行
3.点选下一步
4.再来选择Install from local directory(从本地目录中安装)
5.请把目录设定到当初安装cygwin的路径下
然后一样选择All Users(所有使用者)
6.接下来 请把目录设定为当初安装时套件所存放的路径。在这边基本上应该是和cygwin
安装路径是一样的
7.设好路径后就可以开始选取要安装的套件了。
8.安装完成后在套cygwin内查寻看看是某有安装完成就可以了。

详细内容请参考http://blog.faq-book.com/?p=3378

Cygwin 基本设定sshd-port的修改

基本上Cygwin的使用方式和一般linux差不多
有差别的大概是路径或是一些指令上不一样。
多试几次就会习惯了,今天就来简单说明一下sshd-port的修改方式。
在修改之前先确认一下权限
这边会建议先把ssh_config的权限修改成登入的USER,设定好后在修改为SYSTEM
这部份可依个人情况修改,也可不用修改权限直接更改PORT

详细内容请参考http://blog.faq-book.com/?p=2759

cygwin & mintty

想找一个可以在windows下好用的ssh登录工具,搜了一下,在xp下使用了一下putty,ssh了freebsd.unix-center.net,链接是没有问题的,但不知道什么原因,man page中的函数名等都无法显示,但是在win7下就惨了,根本无法连接,据搜索得启用远程控制连接管理服务,对win7不太了解,也懒得整明白,所以直接装了cygwin,用里面的ssh程序连接,效果很不错,遗憾的是默认的控制台窗口功能很弱,为此,只得在添加mintty做默认终端了。


MinTTY 是一款专用于 Cygwin 环境的终端模拟器,它兼容于 Xterm,支持 UTF-8、CJK 字体、Windows 输入法,可执行拖曳和复制/粘贴操作,具有原生的 Windows 外观及窗口透明等特性。


<img alt="" src="/user_files/codespider/Image/mitty.png" style="width: 830px; height: 417px; ">


可以在cygwin.bat中设置mitty作为默认的shell,我的设置如下:


 
@echo off
C:
chdir C:\cygwin\bin
set _cygwinroot=c:\cygwin
set _termapp=%_cygwinroot%\bin\mintty.exe
start %_termapp% /bin/bash --login -i
然后可以ssh登入了,看一下效果:


<img alt="" src="/user_files/codespider/Image/ssh.png" style="width: 777px; height: 532px; ">