你能帮我解决这个问题吗?
我正在尝试交叉编译一个用于freescale i.MX-6 arm处理器的示例GTK+应用程序。
我导出了我的工具链路径
**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 togtk_init‘
gtk-frameless.c:(.text+0x2c):`gtk_window_new的未定义引用
gtk-frameless.c:(.text+0x38):`gtk_widget_show的未定义引用
gtk-frameless.c:(.text+0x3c):`gtk_main的未定义引用
collect2: ld返回1个退出状态**
在我的例子中,我想我无法正确地指定库的路径..?
我的猜测是正确的,还是除了我做错了什么,请指导我,让它编译或提供相关文件的链接,以便我可以尝试自己。
任何事情都会有帮助的。
谢谢你
发布于 2017-03-17 09:13:08
我想我无法正确指定库的路径..?
是啊。仔细看看你传递的实际旗帜。这些调用实际上不起作用(尝试它们并查看结果):
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-config
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)将为您完成此任务。
https://stackoverflow.com/questions/42851320
复制相似问题