hle*_*bvr 2 c gtk cross-compiling mingw32
我是Linux编程的新手,我正在尝试编译包含GTK +库的ac文件.我的文件被调用test.c,它应该在Windows计算机上运行.我正在使用命令:
i586-mingw32msvc-gcc `pkg-config --cflags gtk+-3.0` -o test test.c `pkg-config --libs gtk+-3.0`
Run Code Online (Sandbox Code Playgroud)
我收到了一个可怕的错误,我试图找出自己出了什么问题,但却无法理解这里发生了什么.
这是输出: 
你几乎肯定会运行pkg-config主机元数据文件,这样的输出可能会使你的交叉编译器,erm,交叉.
试试这个教程,它解释了如何从下载所需的GTK + -3.0 win32二进制文件开始,然后设置你的linux环境,以便pkg-config获取目标元数据文件:
http://www.tarnyko.net/en/?q=node/45
我们的工作pkg-config是为一个程序提供一种直接的方法来确定编译器和链接器的要求,以及它所使用的库的任何依赖库.它还使autoconf(和用户)更容易确定特定包的存在,版本和依赖性.您的示例正在使用:
pkg-config --cflags gtk+-3.0
pkg-config --libs gtk+-3.0
Run Code Online (Sandbox Code Playgroud)
那些将输出使用gtk + -3.0的程序所需的编译器和库标志.假设您的系统上安装了本机版本,则默认输出仅适用于您的系统类型(路径,库名称,依赖库等).
交叉编译的技巧是拥有一个单独的源代码树,.pc(pkg-config元数据),库和头文件(针对每个目标体系结构).pkg-config在configure/compile期间运行时,您可以PKG_CONFIG_PATH像上面的教程中那样进行设置,以便.pc为目标体系结构选择正确的文件.
这里有一个小熊陷阱:PKG_CONFIG_PATH 添加到搜索路径的开头,因此如果您没有将所需的软件安装到目标树中,但是您安装了"本机"版本,它仍然可以回退到错误的包详细信息.您通常应该设置PKG_CONFIG_LIBDIR,这将替换默认路径(通常/usr/lib/pkgconfig).这样,当您交叉编译使用autoconf(configure脚本)的更精细的东西时,您(希望)可以对丢失的包进行合理的诊断,而不是让轮子在编译过程中脱颖而出.
例如,我可以使用此列出只是在openwrt MIPS包我有一个交叉编译树:
WRTROOT=/openwrt/staging_dir/target-mips_r2_uClibc-0.9.32/
PKG_CONFIG_PATH= PKG_CONFIG_LIBDIR=${WRTROOT}/usr/lib/pkgconfig pkg-config --list-all
Run Code Online (Sandbox Code Playgroud)
取消设置PKG_CONFIG_PATH可防止它在我的/usr/local设置中找到额外的包,这PKG_CONFIG_LIBDIR意味着它将找不到本机系统的包.