3

我正在尝试交叉编译一个项目和一个它所依赖的库,以便在嵌入式系统上使用。应用程序和依赖项都使用 automake。我能够毫无问题地编译库。

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

我使用--prefixmake install并没有将输出与所有 x86 库一起放在我的文件系统中。我也尝试过运行 configure 而--prefix不是在运行之前设置DESTDIR环境变量make install。他们似乎在做同样的事情。我希望能够 tar/home/me/build_dir并将其放在嵌入式目标文件系统的根目录中。我希望这--prefix不会在我的主机上的某个地方硬编码绝对路径。

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

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

我遇到了两件事。配置脚本成功完成,但第一次制作失败,因为它找不到其中一个标头。它正在寻找/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++ 的警告,这是我应该担心的事情吗?

4

1 回答 1

4

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

我认为仅--sysrootconfigure脚本中进行设置是不够的,但我不确定。我认为这会在configure运行时设置 sysroot,但不会设置 makefile。

我通常做的是为编译器创建一个 shell 脚本包装器,它使用适当的--sysroot=dir选项调用真正的编译器,然后使用该包装器作为编译器名称来configure. 这样做比尝试获取编译器的所有调用以在--sysroot外部添加标志更简单。

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

预计到达时间:

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

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

然后就可以运行了configure CC=sysroot-gcc。您可以随心所欲地制作它;我有一个通用脚本,它解析名称 ( $0) 并从中获取 sysroot 名称和工具名称 ( gcc,g++等),因此我可以为所有工具重用该脚本。

于 2013-05-15T19:34:16.740 回答