gpt4 book ai didi

c - 为什么我的交叉编译失败了?

转载 作者:行者123 更新时间:2023-12-02 07:30:34 34 4
gpt4 key购买 nike

我是 Linux 编程的新手,我正在尝试编译一个包含 GTK+ 库的 c 文件。我的文件名为 test.c,它应该在 Windows 计算机上运行。我正在使用命令:

i586-mingw32msvc-gcc `pkg-config --cflags gtk+-3.0` -o test test.c `pkg-config --libs gtk+-3.0`

我遇到了一个可怕的错误,我试图自己弄清楚哪里出了问题,但没能理解这里发生了什么。

这是输出:compiler output

最佳答案

您几乎可以肯定正在使用主机元数据文件运行 pkg-config,这样的输出可能会使您的交叉编译器,呃,交叉。

试试这个教程,它解释了如何做你想做的事情,从下载所需的 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

那些将输出使用 gtk+-3.0 的程序所需的编译器和库标志。假设您的系统上安装了 native 版本,默认输出将仅适用于您的系统类型(路径、库名称、依赖库等)。

交叉编译的诀窍是拥有一个单独的源代码树、.pc(pkg-config 元数据)、库和头文件(针对每个目标架构)。当您在配置/编译期间运行 pkg-config 时,您可以像上面的教程一样设置 PKG_CONFIG_PATH 以便它选择正确的 .pc 文件对于目标架构。

虽然这里有一个小陷阱:PKG_CONFIG_PATH adds 到搜索路径的开头,所以如果你没有,它仍然可以回退到错误的包详细信息将所需的软件安装到目标树中,但您安装的是“ native ”版本。您通常应该改为设置 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

取消设置 PKG_CONFIG_PATH 阻止它在我的 /usr/local 中找到额外的包,设置 PKG_CONFIG_LIBDIR 意味着它不会找到 native 系统包.

关于c - 为什么我的交叉编译失败了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22228180/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com