• 页面

  • 功能

  • 标签

  • « 5*12灾难 | Main | 使用Linux共享上网设置案例 »

    Gtkmm系列:交叉编译Window版本的Gtkmm程序示例

    By lerosua | 05月 26, 2008

    Gtkmm是跨平台的,这句话听了很多次,倒是没怎么去试过。今天就试着在Linux下用mingw

    编译一个win32版本的Gtkmm测试程序试试。

    test.cpp

    #include <gtkmm/main.h>
    #include <gtkmm/window.h>
    int main(int argc, char **argv)
    {
    Gtk::Main main_obj(argc, argv);

    Gtk::Window win;

    main_obj.run(win);
    return 0;
    }
    上面是一个简单的gtkmm窗口程序。只会跳出一个窗口,啥也不干。

    平时在Linux编译是这样的:

    g++  test.cpp -o test  `pkg-config gtkmm-2.4 –cflags –libs`

    然而我们需要将它编译成win32的程序时呢。就要用到交叉工具链mingw了。

    首先在您的系统里安装mingw32软件包。在ubuntu或debian系统中可以通过apt管理工具获取

    软件:

    #apt-get install mingw32

    安装完毕后,您系统中应该有以下命令了:

    $ i586-mingw32msvc-g++ -v
    Reading specs from /usr/lib/gcc/i586-mingw32msvc/3.4.5/specs
    Configured with: /build/buildd/mingw32-3.4.5.20060117.1/build_dir/src/gcc-3.4.5-20060117-1/configure -v –prefix=/usr –target=i586-mingw32msvc –enable-languages=c,c++ –enable-threads –enable-sjlj-exceptions –disable-multilib –enable-version-specific-runtime-libs
    Thread model: win32
    gcc version 3.4.5 (mingw special)

    现在您已经有了交叉编译器,但是要跨平台编译Gtkmm,这时候还需要Gtkmm的win32开发库。

    恰巧 Inkscape 这个软件提供了打好包的Gtkmm win32开发库
    inkscape的win32指导地址 下载最新的gtk28-YYMMDD.7z 文件。在这里我下载的是

    gtk28-060502.7z(注意链接有可能失效)

    将这个文件解压到您想放置的地方,在这里我将之解压到了 /usr/local/gtk28

    创建一个链接:

    ln -sf /usr/local/gtk28 /target

    设置交叉编译用到的环境变量

    export PKG_CONFIG_PATH=/target/lib/pkgconfig

    现在,可以用交叉工具编译gtkmm的win32版本了。

    i586-mingw32msvc-g++ test.cpp  -o test.exe  `pkg-config gtkmm-2.4 --cflags --libs`

    最后把编译得出的小程序放到win平台上去跑吧。注意,win平台还需要安装gtkmm的运行库才行。

    PS.本文参考了Cross Compiling Gtkmm Applications to Window

    随着时间的推移,mingw已经有4.x版本,而gtkmm的win32库也出了2.10以上的版本。因此本文只是

    演示交叉编译的一个大概过程。聪明的读者应该会更新其中相应的软件版本的。:-)

    Topics: Gtkmm | 2 Comments »

    Comments



    Spam Protection by WP-SpamFree