postgresql - 为 ARM Sitara AM335x 交叉编译 postgresql

标签 postgresql cross-compiling

我在为我的 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。如果您打算交叉编译,请使用 --host。

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

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

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

最佳答案

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

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

接下来,我对 --host 选项做了一些试验。首先,我尝试使用 ./configure --host=arm-linux-gnueabihf 并运行配置脚本。配置脚本似乎接受这个作为主机参数。然后我进入运行生成文件的下一步。运行此生成文件导致生成错误。错误是所选处理器不支持 Thumb 模式。我进行了快速搜索以查看可以找到有关此错误的哪些信息,然后来到了这个网页: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 库文件。

希望这对以后的其他人有帮助!

关于postgresql - 为 ARM Sitara AM335x 交叉编译 postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28459425/

相关文章:

mysql - Rails 3.1 - 将开发人员从 mySQL 迁移到 PostgreSQL

ruby-on-rails - 即使字符串输入小于4,“对于字符变化(4)来说值太长”

compression - 如何禁止riscv压缩代码?

linux - 交叉编译时 ucLinux libbzip2 reloc 类型错误

gcc - 如何链接到外部 THUMB 代码?

android - 已编译 LKM 的互换性

postgresql - 如何在 Redis 中存储 feed 数据?

c# - 使用回滚的 Postgres、Npgsql 和集成测试

sql - 根据计算值创建索引

c++ - Makefile 编译内核模块以包含树源文件