与automake交叉编译

时间:2013-05-15 19:11:25

标签: cross-compiling gnu gnu-make automake

我正在尝试交叉编译一个项目和它依赖的库,以便在嵌入式系统上使用。应用程序和依赖项都使用automake。我能够在没有太多问题的情况下编译库。

./configure --host=powerpc-none-linux-gnuspe --prefix=/home/me/build_dir
make
make install

我使用了--prefix,因此make install没有将输出放在我的文件系统中,包含所有x86库。我还尝试在没有--prefix的情况下运行configure,而是在运行DESTDIR之前设置make install环境变量。他们似乎做了同样的事情。我希望能够将/home/me/build_dir置于tar并将其放在嵌入式目标文件系统的根目录下。我希望--prefix没有硬编码我主机上的绝对路径。

然后我尝试交叉编译使用此库的应用程序:

./configure --host=powerpc-none-linux-gnuspe --with-sysroot=/home/me/build_dir

我遇到了两件事。配置脚本已成功完成,但第一个make失败,因为它无法找到其中一个标头。它位于/usr/include而不是/home/be/build_dir/usr/include下。 --with-sysroot选项不应该修改包含目录,还是我遗漏了什么?

另外,我收到了警告

libtool: link: warning: library libstdc++.la was moved

我觉得我错过了什么。这个警告是我可以放心忽略的,还是我搞砸了?

总结我的问题: 1)./configure --prefix=xmake DESTDIR=x install之间是否存在差异? 2)更新库标题的搜索路径的正确方法是什么? 3)为什么我收到有关libstdc ++的警告,这是我应该担心的事情吗?

1 个答案:

答案 0 :(得分:4)

根据您的情况,您应该使用DESTDIR。设置--prefix意味着生成的程序将安装在--prefix中的位置。另一方面,DESTDIR是纯粹的make install工件,它在安装时只是前缀到每个路径的开头。生成的产品仍然希望安装在--prefix位置。如果您要在目标主机上安装结果,请将--prefix设置为它将去的位置,并使用DESTDIR将其暂存到其他位置。

我认为仅在--sysroot脚本中设置configure是不够的,但我不确定。我认为在configure运行时设置sysroot但它没有设置makefile。

我通常做的是为编译器创建一个shell脚本包装器,它使用正确的--sysroot=dir选项调用实际编译器,然后使用该包装器作为configure的编译器名称。这样做更简单,而不是试图让编译器的所有调用都在外部添加--sysroot标志。

我不确定libstdc++警告。 libstdc++是编译器的一部分,不是sysroot的一部分......?

ETA:

通过脚本包装器,我的意思是创建一个名为sysroot-gcc的脚本:

#!/bin/sh
exec real-gcc --sysroot=/some/sysroot "$@"

然后你可以运行configure CC=sysroot-gcc。你可以根据自己的喜好来制作这个;我有一个通用脚本解析名称($0)并从中获取sysroot名称和工具名称(gccg++等),以便我可以重用那个脚本适用于所有工具。