Macos Gtk:通过编译源代码在Mavericks(Apple Mac OS)中构建Gtk库

Macos Gtk:通过编译源代码在Mavericks(Apple Mac OS)中构建Gtk库,macos,gtk2,Macos,Gtk2,我想在mac笔记本电脑中使用Gtk libs。它的操作系统是特立独行的。对于我的程序,我不关心Mac的外观和感觉。为了编译我的程序,我不喜欢图形界面,但更喜欢gcc和make命令行工具(Linux风格)。因此,我不想通过安装Xcode(占用太多空间的怪物)加上macport的端口Gtk来安装Gtk libs。我更喜欢编译源代码来安装Gtk libs。下面是我的步骤 通过在Apple开发者网站上安装Xcode命令行工具commandlinetoolsosx10.9forxcode6.2.dmg,构

我想在mac笔记本电脑中使用Gtk libs。它的操作系统是特立独行的。对于我的程序,我不关心Mac的外观和感觉。为了编译我的程序,我不喜欢图形界面,但更喜欢
gcc
make
命令行工具(Linux风格)。因此,我不想通过安装Xcode(占用太多空间的怪物)加上macport的端口Gtk来安装Gtk libs。我更喜欢编译源代码来安装Gtk libs。下面是我的步骤

  • 通过在Apple开发者网站上安装Xcode命令行工具
    commandlinetoolsosx10.9forxcode6.2.dmg
    ,构建
    gcc
    make

  • 通过安装
    XQuartz-2.7.8.dmg构建
    X
    开发环境,因为X11不再随Mac OS提供

  • 下载Gtk源程序包及其所有依赖项。我会按照下面的顺序安装软件包

  • zlib-1.2.8->pkg-config-0.29->jpegsrc.v9a.tar.gz->libpng-1.6.18->tiff-4.0.6->libiconv-1.14->gettext-0.19.6->freetype-2.6->fontconfi-2.11.94->libffi-3.2.2.1->pixman-0.33.4->cairo-1.14.4->glib-2.47.1->pango-1.38.1->atk-2.18.0->gdk-pixb1.33++

    CPPFLAGS="-I$GTK_DIR/include -I$GTK_DIR/include/cairo -I$GTK_DIR/include/gdk-pixbuf-2.0 -I$GTK_DIR/include/pango-1.0 -I$GTK_DIR/include/atk-1.0 -I$GTK_DIR/include/freetype2 -I$GTK_DIR/include/gio-unix-2.0 -I$GTK_DIR/include/glib-2.0 -I$GTK_DIR/lib/glib-2.0/include"  
    LD_LIBRARY_PATH="$GTK_DIR/lib"
    ./configure --prefix=$GTK_DIR   
    make  
    make install 
    
  • 构建用于编译的环境变量

    GTK_DIR="$HOME/gtk"
    CPPFLAGS="-I$GTK_DIR/include"
    LDFLAGS="-L$GTK_DIR/lib"
    PKG_CONFIG_PATH="$GTK_DIR/lib/pkgconfig"
    export CPPFLAGS LDFLAGS PKG_CONFIG_PATH
    
    LD_LIBRARY_PATH="$GTK_DIR/lib"
    PATH="$GTK_DIR/bin:$PATH"
    export LD_LIBRARY_PATH PATH
    
  • 软件包的编译
    pkg-config-0.29

    LDFLAGS="-framework CoreFoundation -framework Carbon"  
    ./configure --with-internal-glib --prefix=$GTK_DIR   
    make  
    make install  
    
  • 包的编译
    gtk+-2.24.28

    CPPFLAGS="-I$GTK_DIR/include -I$GTK_DIR/include/cairo -I$GTK_DIR/include/gdk-pixbuf-2.0 -I$GTK_DIR/include/pango-1.0 -I$GTK_DIR/include/atk-1.0 -I$GTK_DIR/include/freetype2 -I$GTK_DIR/include/gio-unix-2.0 -I$GTK_DIR/include/glib-2.0 -I$GTK_DIR/lib/glib-2.0/include"  
    LD_LIBRARY_PATH="$GTK_DIR/lib"
    ./configure --prefix=$GTK_DIR   
    make  
    make install 
    
  • 其他
    包的编译

    LD_LIBRARY_PATH="$GTK_DIR/lib"  
    ./configure --prefix=$GTK_DIR   
    make  
    make install 
    
  • 除了最后一个
    gtk+-2.24.28
    外,所有软件包的编译都完成了。编译gtk+-2.24.28时的错误为

    /bin/sh ../../libtool  --tag=CC   --mode=link gcc  -g -O2 -Wall -export-dynamic -framework CoreFoundation -framework Carbon -L/Users/wu/gtk/lib -o builder builder.o ../../gdk/libgdk-x11-2.0.la ../../gtk/libgtk-x11-2.0.la -L/usr/X11/lib -lXrender -lX11    -lm 
    libtool: link: gcc -g -O2 -Wall -o .libs/builder builder.o  -L/Users/wu/gtk/lib ../../gdk/.libs/libgdk-x11-2.0.dylib -L/usr/X11/lib ../../gtk/.libs/libgtk-x11-2.0.dylib /Users/wu/Downloads/gtk/src/gtk+-2.24.28/gdk/.libs/libgdk-x11-2.0.dylib -lXinerama /Users/wu/gtk/lib/libpangocairo-1.0.dylib /Users/wu/gtk/lib/libpango-1.0.dylib /Users/wu/gtk/lib/libgthread-2.0.dylib /Users/wu/gtk/lib/libgdk_pixbuf-2.0.dylib /Users/wu/gtk/lib/libgio-2.0.dylib -lresolv /Users/wu/gtk/lib/libgobject-2.0.dylib /Users/wu/gtk/lib/libffi.dylib /Users/wu/gtk/lib/libcairo.dylib /Users/wu/gtk/lib/libpixman-1.dylib /Users/wu/gtk/lib/libfontconfig.dylib -lexpat /Users/wu/gtk/lib/libfreetype.dylib -lbz2 /Users/wu/gtk/lib/libpng16.dylib -lz -lSM -lICE -lXext /Users/wu/gtk/lib/libgmodule-2.0.dylib /Users/wu/gtk/lib/libglib-2.0.dylib /Users/wu/gtk/lib/libintl.dylib /Users/wu/gtk/lib/libiconv.dylib -lc -lXrender -lX11 -lm -pthread -framework ApplicationServices -framework Carbon -framework CoreFoundation
    clang: warning: argument unused during compilation: '-pthread'
    Undefined symbols for architecture x86_64:
      "_atk_object_ref_relation_set", referenced from:
          _test_widget in builder.o
      "_atk_relation_get_relation_type", referenced from:
          _test_widget in builder.o
      "_atk_relation_get_type", referenced from:
          _test_widget in builder.o
      "_atk_relation_set_get_n_relations", referenced from:
          _test_widget in builder.o
      "_atk_relation_set_get_relation", referenced from:
          _test_widget in builder.o
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make[4]: *** [builder] Error 1
    make[3]: *** [all-recursive] Error 1
    make[2]: *** [all] Error 2
    make[1]: *** [all-recursive] Error 1
    make: *** [all] Error 2
    
  • 该错误是关于体系结构x86\u 64未定义符号的链接错误。我用谷歌搜索了错误,建议在Xcode GUI中设置正确的体系结构。但它并没有帮助,因为我的笔记本电脑中根本并没有XodeGUI

    我还尝试了
    CC=“gcc-arch i386”
    ,但都没有成功。我尝试了
    LDFLAGS=“-frameworkcorefoundation-frameworkcarbon-L$GTK_DIR/lib”
    ,但都没有成功。在最后两次尝试中,我只重新编译了cairo-1.14.4到gtk+-2.24.28的包,而不是所有的包

    有什么线索吗?请帮忙。多谢各位


    编辑:使用atk-2.20解决了问题

    我也试着这么做;将
    -latk-1.0
    添加到LDFLAGS修复了该问题。autotools/gcc/which似乎缺少一些lib/include标志。我不知道这是为什么,但是在调用
    /configure
    时手动添加它们很好


    我认为在这种情况下,对建筑的抱怨只是一种转移视线的行为。

    我也在尝试这样做;将
    -latk-1.0
    添加到LDFLAGS修复了该问题。autotools/gcc/which似乎缺少一些lib/include标志。我不知道这是为什么,但是在调用
    /configure
    时手动添加它们很好

    我认为在这种情况下,对建筑的抱怨只是一种转移视线的行为