2015-02-11 125 views
2

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

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

我已经下载了PostgreSQL的源代码,目的是交叉编译,以便为我提供与我的目标系统兼容的libpq.so库,但实际上没有关于如何执行此操作的信息。 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.

的配置文件,使一个小参考--host

我已经使用与配置文件中的参数CC改变我的编译器下面的尝试选项,但是我能找到的文件中唯一的信息是关于mingw和windows,这不是我想要的。

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

我可以给configure脚本设置什么参数,以便它能够用正确的编译器进行交叉编译以生成目标设备可以使用的库?我还没有找到关于--host/- 目标如何工作或如何使用它们的资源?

回答

4

好的,所以经过一段时间的摆弄之后,我想我实际上能够交叉编译PostgreSQL并回答我自己的问题。

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

接下来,我做了一些实验--host选项。首先,我尝试使用./configure --host=arm-linux-gnueabihf并运行配置脚本。配置脚本似乎接受这个作为主机参数。然后我去了运行makefile的下一步。运行此生成文件导致生成错误。错误是selected processor does not support Thumb mode。我做了一个快速搜索,看看我能找到关于这个错误的信息,然后来到这个网页:http://www.postgresql.org/message-id/[email protected]

这个网页给了我更多的信息,因为它似乎是人试图做一些非常相似的事情。其中一位回复者提到--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实际上生成了所有的文件,包括我需要的libpq.so库文件。

希望这有助于未来的其他人!

+0

看看[Buildroot](http://buildroot.uclibc.org/)。它提供了Qt 4.x/5.x和PostgreSQL包。 – yegorich 2015-02-12 09:33:46