2015-02-11 161 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