2017-03-17 41 views
0

你能帮助解决这个问题吗?如何为基于Linux平台的ARM构建GTK + APP

我试图交叉编译的样品GTK +申请基于飞思卡尔i.MX -6-臂处理器

我已经出口我的工具链路径

**export PATH=/u02/tools/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH** 

和我试图越过 - 通过使用以下序列编译应用程序

**arm-none-linux-gnueabi-gcc gtk-frameless.c -o frameless `pkg-config --cflags=-I/U02/tools/DOP/imx6/rootfs/usr/include gtk+-2.0` `pkg-config --libs=-L/U02/tools/DOP/imx6/rootfs/usr/lib/ -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype`** 

并且我陷入以下错误

** - lgtk-x11-2.0:未知的选项 /tmp/ccn3JmIw.o:在功能main': gtk-frameless.c:(.text+0x24): undefined reference to gtk_init”

GTK的frameless.c :(文本+ 0x2c上):未定义参考`gtk_window_new。 '

GTK的frameless.c :(文本+ 0x38):未定义参考`gtk_widget_show'

GTK的frameless.c :(文本+为0x3C):未定义参考`进入主循环

collect2:ld返回1退出状态**

在我的情况下,我想我无法正确指定库的路径..?

我的猜测是正确的还是除此之外我是否在做任何错误的事情,请指导我,使其编译或提供相关文档的链接,以便我可以尝试自己。

任何事情都会有帮助。

三江源

回答

0

我想我是无法正确指定库的路径..?

是。仔细看看你传递的实际标志。这些呼叫不实际工作(尝试一下,看看效果):

pkg-config --cflags=-I/U02/tools/DOP/imx6/rootfs/usr/include gtk+-2.0 
pkg-config --libs=-L/U02/tools/DOP/imx6/rootfs/usr/lib/ -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfontconfig -lgobject-2.0 -lglib-2.0 -lfreetype 

你有两个基本的选择:要么你用pkg配置这样

pkg-config --cflags gtk+-2.0 
pkg-config --libs gtk+-2.0 

,让你的库以及您的pkg-config知道的标头...

或者您可以手工构建包含和链接器标志,以指向交叉编译目标标头和库位置。

如果幸运的话,您可以使用PKG_CONFIG_SYSROOT_DIR和PKG_CONFIG_LIBDIR env变量来启用pkg-config,甚至用于交叉编译(请参阅pkg-config文档)。一些交叉开发环境(比如Yocto/openembedded)会为你做这件事。

+0

如果我正在执行pkg-config --cflags = -I ..和pkg-config --libs = -L ..正如你所说我收到以下错误“-lgtk-x11-2.0:unknown option” 。 – Mounika

+0

是的,这些调用没有任何意义:“--cflags”和“--libs”不带参数,“-l”根本不是pkg-config选项。请参阅pkg-config文档 – jku