• Lerosua on Twitter

    t
  • 订阅

    抓虾
    google reader
    bloglines
    鲜果
  • 分类目录

  • 功能

  • « | Main | »

    再次配置gtkmm交叉编译环境

    By lerosua | 三月 29, 2009

    Gtkmm有跨平台的特性。我决定发扬此特性,那先从port gtkmm到win
    平台开始吧。那第一步就是配置gtkmm的win编译环境。网上大多文章都
    介绍了在win下配置gtkmm的环境。而我之前也写过一篇介绍在linux下通
    过mingw32来编译gtkmm程序的文章。
    Gtkmm系列:交叉编译Window版本的Gtkmm程序示例

    是的,我觉得这样才有意思,交叉编译嘛。

    但是那一篇是参考别人的译作,方法有些繁琐,重要的是,已经不太适合
    当前的环境了。主要是那个文章只支持到gtk28版本,目前的gtkmm已经
    到2.16了。mingw32也是4.3的版本,众所周知,4.3版本的gcc语法严谨
    多了。
    经过昨天一晚上及今早的奋斗,和yetist双线合作,一人一种方法找环境配
    置方法。目前完成了第一阶段的成功。

    事实上,arch社区里是有gtk2的mingw32包,也就是说gtk+的交叉编译
    环境是有人做好的了。只需要用yaourt就能安装配置完成。但gtkmm却
    没有,yetist就循着这条线索,准备编译gtkmm的win32包。

    而我在看了那些在win下配置gtkmm环境的文章后,想到,其实也只是下
    载需要的库而已啊,而那些库,是组成gtkmm的基础,既然我现在是要编
    译pe格式的程序,最终调用的不也是那些库嘛,那把win下的gtkmm开发
    包转到linux下来给mingw32调用不就成了。于是照做,编译成功了又一个
    gtkmm demo程序。

    废话了这么多,那就正式开始交叉编译gtkmm之路吧。
    很简单:

    1.先下载gtkmm开发包

    当然是for win的。http://ftp.acc.umu.se/pub/GNOME/binaries/win32/gtkmm/2.16/gtkmm-win32-devel-2.16.0-2.exe
    2.16的开发包好啊,gtk+啥的都包含了。
    但需要在win下安装解压出来,虽然是42M的大小,解出来有380M大。
    安装完后从win分区里安装的gtkmm目录完整复制到linux分区中。我这里
    放在/src/mingw32-gtkmm,你可以随便定义这个目录。只记住需要做个
    链接即可,

    sudo ln -s /src/mingw32-gtkmm /target

    2.修正prefix路径

    这是for win的开发包,所以还是需要修改一些东西的,主要是pkgconfig
    的路径问题。
    执行下面两个命令即可修正:

    find /target/lib/pkgconfig  -name "*.pc" |xargs sed -i 's#prefix=c:\/devel\/target.*#prefix=\/target#'
    find /target/lib/pkgconfig  -name "*.pc" |xargs sed -i 's#prefix=\/gtkmm_debug#prefix=\/target#'

    3.安装mingw32

    这步是安装编译器,pacman 也行,yaourt 也行.

    sudo pacman -S mingw32

    装好后执行下面命令可见:

    i486-mingw32-g++ -v
    Using built-in specs.
    Target: i486-mingw32
    Configured with: /home/sergej/community.cvs/devel/mingw32-gcc/src/gcc-4.3.0-20080502-mingw32-alpha-src/gcc-4.3.0/configure --target=i486-mingw32 --host=i686-pc-linux-gnu --build=i686-pc-linux-gnu --prefix=/usr --enable-languages=c,c++ --enable-sjlj-exceptions --enable-hash-synchronization --disable-nls --disable-libssp --disable-shared
    Thread model: win32
    gcc version 4.3.0 (GCC)

    4.搞定

    那么是搞定了吗?基本是完成了。
    还是经典的测试代码:

    #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;
    }

    编译命令:

    i486-mingw32-g++ test.cpp -o test.exe `PKG_CONFIG_PATH=/target/lib/pkgconfig  pkg-config gtkmm-2.4 --cflags --libs`

    生成了的test.exe放到win下跑吧。win的环境需要有gtkmm支持,把一开
    始下载的开发包装上就有了。

    目前来说,工作正常,下一步可以把精力放在跨平台代码上了.
    看图:

    发件人 lerosua' blog

    Topics: gtkmm | 2 Comments »

    2 Responses to “再次配置gtkmm交叉编译环境”

    1. 找不着北 Says:
      四月 9th, 2009 at 4:51 下午

      你好,想问你下的日志里的代码高亮用的是哪个插件?

    2. lerosua Says:
      四月 10th, 2009 at 9:10 上午

      是 wp-syntax