我想在Mac笔记本电脑中使用Gtk库。它的操作系统是小牛队。对于我的程序,我不关心Mac的外观和感觉。为了编译我的程序,我不喜欢图形界面,但更喜欢gcc
和make
命令行工具(Linux风格)。因此,我不想通过安装Xcode(一个占用太多空间的怪物)加上macport的端口Gtk来安装Gtk库。我更喜欢编译源代码来安装Gtk库。接下来是我的步骤。
通过从Apple开发人员网站安装Xcode命令行工具gcc
来构建make
和commandlinetoolsosx10.9forxcode6.2.dmg
。
通过安装X
构建XQuartz-2.7.8.dmg
开发环境,因为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 -> fontconfig-2.11.94 -> libffi-3.2.1 -> pixman-0.33.4 -> cairo-1.14.4 -> glib-2.47.1 -> pango-1.38.1 -> atk-2.18.0 -> gdk-pixbuf-2.33.1 -> gtk+-2.24.28
构建用于编译的环境变量。
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
other
个包
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
错误是关于Undefined symbols for architecture x86_64
的链接错误。我用Google搜索了错误,建议在Xcode GUI中设置正确的架构。但它没有帮助,因为我在笔记本电脑中根本没有Xode GUI。
我也试过CC="gcc -arch i386"
,但也没有用。我尝试了LDFLAGS="-framework CoreFoundation -framework Carbon -L$GTK_DIR/lib"
,但也没有奏效。对于最后两次尝试,我只重新编译了从cairo-1.14.4到gtk + -2.24.28的软件包,而不是所有软件包。
任何线索?请帮忙。谢谢。
编辑:使用atk-2.20解决了这个问题。
答案 0 :(得分:0)
我试图这样做;将-latk-1.0
添加到LDFLAGS修复了问题。似乎autotools / gcc / what缺少一些lib / include标志。我不知道为什么会这样,但是在调用./configure
时手动添加它们可以正常工作。
我认为在这种情况下,关于架构的投诉只是一个红色的鲱鱼。