【问题标题】:cross-compile postgresql for ARM Sitara AM335x为 ARM Sitara AM335x 交叉编译 postgresql
【发布时间】:2015-02-11 16:30:12
【问题描述】:

我在为我的 TI Sitara AM335x EVM SK 交叉编译 PostgreSQL 时遇到问题。我的主机系统是运行 Ubuntu 12.04 的 i386 机器。

我的应用程序是使用 Qt 用 C++ 编写的。当我尝试编译时,我得到 libpq.so 不兼容的错误。我相信这是因为交叉编译器正在尝试使用主机 libpq.so 而不是目标系统(据我发现,它不存在)。

我已经下载了 PostgreSQL 的源代码,目的是交叉编译它,以便为我提供与我的目标系统兼容的 libpq.so 库,但是几乎没有关于如何执行此操作的信息。

我尝试使用 CC 参数和配置文件将我的编译器更改为以下内容:CC=/home/tim/ti-sdk-am335x-evm-06.00.00.00/linux-devkit/sysroots/i686-arago-linux/usr/bin/arm-linux-gnueabihf-gcc 但配置脚本给了我这个错误:configure: error: cannot run C compiled programs. If you meant to cross compile, use --host.

configure 文件对 --host 选项做了一个小的引用,但我能在文件中找到的唯一信息是对 mingw 和 windows 的引用,这不是我想要的。

我快速搜索了配置文件,它引用了 --host 选项,但没有解释什么是有效主机。我假设使用--host 选项会有一个关联的--target。

我可以为配置脚本提供哪些参数,以便它与正确的编译器交叉编译以生成我的目标设备可以使用的库?关于 --host/--target 如何工作或如何使用它们,我还没有找到任何资源吗?

【问题讨论】:

    标签: postgresql cross-compiling


    【解决方案1】:

    好的,所以在摆弄了一会儿之后,我想我实际上能够交叉编译 PostgreSQL 并回答我自己的问题。

    在我继续之前,我意识到我忘记将交叉编译器的路径添加到 PATH 环境变量中。我使用命令export PATH=/path/to/cross/compiler:$PATH将编译器路径插入到PATH环境变量中。

    接下来,我对 --host 选项做了一些试验。首先,我尝试使用./configure --host=arm-linux-gnueabihf 并运行配置脚本。配置脚本似乎接受它作为主机参数。然后我进入运行makefile的下一步。运行此 makefile 会导致生成错误。错误是selected processor does not support Thumb mode。我快速搜索了一下可以找到有关此错误的信息并来到此网页:http://www.postgresql.org/message-id/E1Ra1sk-0000Pq-EL@wrigleys.postgresql.org

    这个网页给了我更多信息,因为这个人似乎在尝试做一些与我非常相似的事情。该帖子的一位回复者提到 --disable-spinlocks 用于 PostgreSQL 默认不支持的处理器。我模拟了上面列出的网站中使用的参数,并使用了命令:./configure --host=arm-linux CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar CPP=arm-linux-gnueabihf-cpp --without-readline --without-zlib --disable-spinlocks 来生成我的 makefile。这个makefile实际上生成了所有的文件,包括我需要的libpq.so库文件。

    希望这对将来的其他人有所帮助!

    【讨论】:

    • 看看Buildroot。它提供了 Qt 4.x/5.x 和 PostgreSQL 包。