嵌入式平台下的apache與php移植小結

2021-06-19 16:23:24 字數 1943 閱讀 2821

經過若干天的努力,phpinfo()總算是返回結果了,雖然還有很多問題需要解決,但是這個過程還是值得總結一下的。

原始碼包版本:apache1.3.39 php5.5.6 linxu2.6.32 嵌入式平台為omap

1、在編譯生成apache的過程中主要遇到了如下問題:

(1)getline函式的申明衝突了,與標準庫中的getline函式起了衝突,解決的辦法就是改個名字了,kscope在這裡幫了大忙的了

(2)gen_test_char什麼的相關的錯誤,不是很明白什麼原因,經過查詢資料才發現,應為是交叉編譯,在申城的過程中需要呼叫一些相關的中間生成的檔案,可是在主機環境下無法執行交叉編譯得到的那些中間程式,解決的辦法就是採用編譯兩套原始碼的方法,首先用在主機的環境下用主機的gcc編譯並生成apache相關的程式,然後在交叉編譯的時候,將主機環境下生成的gen_test_char程式直接複製到對應的位置了,同樣的還有乙個gen_uri_**什麼的相關的問題也是如此了,具體在**找到這兩個檔案,在用gcc編譯得到的結果裡面find一下就找到了,然後copy到制定位置

2、在編譯php的時候,基本沒出現什麼問題,只是第一次編譯生成的和apache配合無法解析php檔案,在編譯的過程中印象當中只是報了乙個關於ldopen,ldclose相關的未定義的錯誤了 修改makefiel檔案在extra_libs 後面加上-ldl 解決了

編譯過程沒有遇到什麼非常特別的問題,這裡值得思考的是,在移植apache和php的過程中,需要對apache的原始碼分別在主機環境和目標環境下編譯兩次,我為了保險起見,都執行了make install 當然在configure的時候都配置了prefix,這樣我就知道到底生成了哪些檔案,在php的生成過程中,應為我幾乎禁用了所有的模組,只是啟用了很少幾個模組,所以並有用到兩次編譯生成php的過程,但是我想如果需要考慮其他的模組的話,很可能需要採用這種兩次編譯的方式,應為在編譯的時候,很可能編譯的原始碼包需要一些中間生成的庫檔案或者程式的支援和處理,而主機環境下是不能直接執行目標環境下的**的,所以有的時候可能需要借助主機環境下編譯得到的中間程式,來生成交叉編譯環境下的程式,這一點是值得思考的!!!

還有乙個值得思考的問題就是apache 和php的編譯生成好了,apache也啟動了能夠請求html頁面了,可是怎麼解析php呢,就是怎麼讓apace呼叫php呢??

還是google得到結果: 參考文件進行設定

到這一步的時候 :

loadmodule php5_module        libexec/libphp5.so

才發現問題的所在

在編譯php的時候,必須制定apache的apxs,然後編譯php的過程就會在apache的libexec資料夾下生成libphp5.so檔案,很明顯我的目標板的apache/libexec資料夾下是不存在這個檔案了,於是重新配置和編譯php

./configure --prefix=/安裝路徑/ --with-apxs=/apache的安裝路徑/apache/bin/apxs(這個引數很重要) --with-sqlit 然後就是其他的一些引數了

這就是為什麼需要對apache編譯兩次了,如果在制定apxs的時候,指定的是目標系統下的apache中的apxs那麼在配置php的時候,就會檢測出apxs無法執行,很顯然,在配置php的時候需要用到apache的apxs這個程式了,抱著試試的心態,用主系統環境下的apxs代替了,重新編譯生成,這個時候如所預計的一樣,在apxs對應的apache/libexec目錄下生成了libphp5.so檔案,於是我將該檔案複製到了目標系統的apache對應的資料夾下面,然後按照配置文件的內容盡心配置,phpinfo正常工作了,yes!!

apache就相當與乙個管家,接管了http請求,然後按照配置引數來解析php檔案,並將解析的檔案傳送回客戶端口,大概的配置流程如下:

(1)、loadmodule 載入php模組

(2)、告訴apache如何解析php字尾的檔案

重啟apache這個時候php就能夠被解析了!

下一部,就是移植mysql了, come on!!

構建嵌入式linux平台下的使用者應用

1.引言 在專用的嵌入式板子執行 gnu linux 系統已經變得越來越流行。乙個嵌入式 linux 系統從軟體的角度看通常可以分為四個層次,如圖1 1所示 1 引導程式。包括固化在韌體 firmware 中的 boot 可選 和 boot loader 層實現的。mtd fnl層向上將快閃儲存器裝...

非嵌入式與嵌入式的區別

非嵌入式是通過軟體控制硬體,軟硬體之間直接聯絡來實現要求。但是一旦硬體發生改變軟體也要改變,為了降低這種偶合度過高的問題,出現了嵌入式。嵌入式在軟體和硬體之間新增了作業系統,軟體通過控制作業系統進而控制硬體,硬體發生改變並不會導致軟體也發生改變,這為軟體開發人員節約了很多時間,並且嵌入式能在已有的硬...

嵌入式平台 RAM與ROM區分

rom read only memory 和ram random access memory 指的都是半導體儲存器,rom在系統停止供電的時候仍然可以保持資料,而ram通常是在掉電之後就丟失資料,典型的ram就是計算機的記憶體。rom有很多種,prom是可程式設計的rom,它和eprom 可擦除可程...