2011-07-02 273 views
6

我想交叉編譯php的手臂,並有很好的進展,但我完全卡住它想要運行PHP本身(不知道爲什麼)。因爲它是一個二進制的手臂,而不是英特爾(我的建築平臺),它不會運行:交叉編譯php

/bin/sh: /path-to-build/sapi/cli/php: cannot execute binary file 

我怎樣才能解決這個問題?配置腳本明白我是交叉編譯,但沒有做任何事情(從配置日誌):

checking whether the C compiler (/path-to-compiler/arm-none-linux-gnueabi-gcc) is a cross-compiler... yes 

我編譯php-5.3.6與configure命令行:

export CC=/path-to-cc/arm-none-linux-gnueabi-gcc 
../configure --prefix=/prefix-path/ --host=arm-none-linux-gnueabi 
      --disable-libxml --disable-dom --disable-openssl 
      --without-iconv --without-openssl --disable-simplexml 
      --disable-xml --disable-xmlreader --disable-xmlwriter 
      --without-pear --without-sqlite --without-sqlite3 
      --disable-pdo --without-pdo-sqlite 
+0

我把工具鏈的路徑,只是沒有設置'CC'然後指定'--host =手臂-NONE-Linux的gnueabi'應該讓'configure'找到一切都需要:編譯器,鏈接器,條等 –

+0

它沒關係......它在php上失敗,不在工具 – Dani

+0

你確定它鏈接正確嗎?我的意思是這不是因爲CC是arm-none-linux-gnueabi-gcc,'configure'正確地解析了其他工具鏈的工具......「無法執行二進制文件」可以表示鏈接問題,因爲'configure'沒有使用正確的鏈接器(因爲你沒有設置'LD') –

回答

5

我能通過禁用phar來解決這個問題。我希望禁用這麼多模塊不會破壞內部的某些東西。

+1

有沒有地方可以解釋你是如何完成這個過程的?我現在想做同樣的事情,並且很困難。 – meanbunny

2

構建時無需交叉編譯,然後在交叉編譯時,通過在運行make時在命令行上重寫makefile中的變量來指向主機版本的php。

喜歡的東西:

make PHP_VAR_NAME=path to php built for host 
1

我設法編譯PHP的手臂以下參數:

export PATH="$PATH:/toolchains/gnu_cortex-a9_tools/usr/bin" 
export ARCH=arm 

配置腳本:

./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-uclibcgnueabi --prefix=/usr/arm CC="arm-linux-uclibcgnueabi-gcc --sysroot=/toolchains/gnu_cortex-a9_tools/" --disable-libxml --disable-dom --without-iconv --without-openssl --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear --without-sqlite3 --disable-pdo --without-pdo-sqlite --disable-phar 

其次

make 
1

我在運行configure腳本後通過編輯Makefile來設法解決類似問題,同時交叉編譯PHP 5.6.0。只需更換的

$所有出現(top_builddir)/ $(SAPI_CLI_PATH)

在/ usr/bin中/ PHP

哪裏/usr/bin/php爲您的主機php cli。確保已安裝它,例如,用於Debian/Ubuntu的sudo apt-get install php5-cli

這樣Phar擴展後建立精細