Linux 中編譯 PHP 會遇到的問題(轉)
Linux 中編譯 PHP 會遇到的問題(轉)[@more@] 1. 我用匿名CVS得到最新版的原始碼包, 但沒有配置指令碼檔案!
你必須安裝 GNU autoconf 包,這樣可以從 configure.in 生成配置指令碼檔案。只要執行在 CVS 伺服器得到原始碼的頂級目錄下的 ./buildconf。 (注意,除非你執行 configure --enable-maintainer-mode 選項, 配置指令碼是不會重新生成, 即使 configure.in 檔案已更新, 所以當你發現 configure.in 改變了,你也要手工做一遍. 在 config 或 config.status 執行後應該在你的 Makefile 裡能看到象 @VARIABLE@ 這樣的標號。)
2. 我在配置 PHP 在 Apache下工作時出了問題。
它說不能找到 httpd.h, 可是我看它就在那裡!你要告訴 configure/setup 指令碼 Apache 的頂級目錄的位置。就是說你要標明 --with-apache=/path/to/apache,而不是 --with-apache=/path/to/apache/src。
3. 當我執行 conifgure 時,它說它不能找到 include 檔案或 一些庫:GD,gdbm,或其它的一些包!
你可以看看 configure 指令碼,那些標頭檔案或非標準庫的位置,要送一些特殊的標誌給C前處理器。例如:CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
假如你的 shell 使用 csh-variant,那麼它將會是 (為什麼?): env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
4. 我在編譯檔案 language-parser.tab.c 時出錯,提示: yytname undeclared。
你需要更新你的 Bison 版本. 你可以在 找到最新版本。
5. 當我執行 make 起初正常但最終失敗了,在連線最後的應用時,出錯說找不到一些檔案。
一些老版本的 make 不能把 functions 目錄下的編譯的檔案放到同一個目錄下,試著執行 cp *.o functions 然後再執行 make 看看是否會好些。如果好了,你真的應該更新你的 GNU Make 的版本了。
6. 在連線 PHP 時, 出一堆錯說 undefined references。
看看檔案裡的連線行,確認所有的相關包都已經正確包含。通常這樣是因為缺少 '-ldl',還有一些你想支援的資料庫包。
如果你是在連線到 Apache 1.2.x,你記得要在在 EXTRA_LIBS 行增加一些額外的資訊 並且重執行 Apache's Configure 指令碼嗎? 參見發行包裡的 INSTALL 檔案。很多人說他們一增加 '-ldl' 馬上得到了 libphp4.a 。
7. 我不清楚怎樣在 Apache 1.3下編譯 PHP。
事實上很簡單,按下面的步驟:
取得 Apache 1.3 原始碼,在下面的位置
在某個目錄下解壓出來, 如 /usr/local/src/apache-1.3.
在PHP的發行包目錄下,編譯 PHP :./configure --with-apache=//apache-1.3 ( 使用者實際的apache-1.3目錄位置替代 。
打入: make 然後: make install 編譯 PHP,拷必須的檔案到 Apache 目錄下。
改變到你的 //apache-1.3/src 目錄,編輯 Configuration 檔案. 把下面的行增加到檔案裡: AddModule modules/php4/libphp4.a。
輸入: ./Configure 然後: make。
這樣你就有了一個 httpd 檔案!
注意:你也可以使用新的 Apache ./configure 指令碼. 見發行包裡的 README.configure 當然也要看看PHP 發行包裡的 INSTALL 檔案。
8. 我按照步驟一步一步安裝了 Apache 模組(Unix下), 可是在瀏覽器裡開啟 PHP 指令碼時它卻問我是否要儲存。
這意味著你的 PHP 模組沒有被載入。你可從下面三點來檢查:
確認你執行的 Httpd 是你剛剛編譯了 PHP 的 Httpd. 可以執行:/path/to/binary/httpd -l
如果你沒有看到 mod_php4.c 列出來,那麼你執行了不正確的 Httpd。最好重新安裝它。
確認你在 Apache .conf 檔案裡增加了正確的 Mime 型別.它應該是這樣:AddType application/x-httpd-php3 .php3 ( PHP 3) 或 AddType application/x-httpd-php .php ( PHP 4) 也保證 AddType 這行沒有包括在或 塊裡,它們會使它無效。
最後,Apache 1.2 和 Apache 1.3 預設的配置檔案的位置是不同的。你應該檢查你增加了 AddType 行的配置檔案的位置。你可以在 httpd.conf 放一些明顯的錯誤或改變,這樣如果這檔案被讀的話,系統會通知你。
9. 系統說使用: --activate-module=src/modules/php4/libphp4.a 可那檔案根本不存在,我只好改成 --activate-module=src/modules/php4/libmodphp4.a 但它不工作了!該怎麼辦?
請注意 libphp4.a 事實並不存在 .apache 程式會建立它!
10. 我要把 PHP 編譯成 Apache 的靜態模組,用: --activate-module=src/modules/php4/libphp4.a 可是系統說我的編譯器不是 ANSI 相容的。
這個錯誤訊息是 Apache 誤導的,可以用更新版本來修正它。
11. 我用 --with-apxs 編譯 PHP 時, 我總是得到一些奇怪的錯誤。
出現這樣的情況可以從三點來檢查。第一,因為某種原因 Apache 在編譯 apxs Perl 指令碼的時候,沒有建立適當的標誌變數,找到你的 apxs 指令碼 (試試命令 which apxs,通常在 /usr/local/apache/bin/apxs or /usr/sbin/apxs. 開啟它找到象下面這樣的行: my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
如果你看到的是這樣,那麼問題就出在這裡. 因為值裡包含的是空格或其它不正確的值, 如 'q()'。把它樣變成象下面的那樣:my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
第二種可能僅僅出現在 Red Hat 6.1 和 6.2上. apxs 指令碼 Red Hat 版有錯。看這行: my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
如果你看到了,就把它改成下面的行:my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
第三, 你要是 重配置 / 重安裝 Apache,必須在 ./configure 後,在 make之前,執行 make clean
12. 在 make 時, 我得到很多關於 microtime 錯誤, 還有許多 RUSAGE_ stuff.
在安裝過程中 make 時,如果你看到下面的錯:microtime.c: In function `php_if_getrusage':microtime.c:94: storage size of `usg' isn't knownmicrotime.c:97: `RUSAGE_SELF' undeclared (first use in this function)microtime.c:97: (Each undeclared identifier is reported only oncemicrotime.c:97: for each function it appears in.)microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)make[3]: *** [microtime.lo] Error 1make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[2]: *** [all-recursive] Error 1make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/master/php-4.0.1/ext'make: *** [all-recursive] Error 1
那是你的系統出錯了。你應該修復 /usr/include 檔案.具體做法是安裝和你的 glibc 匹配的 glibc-devel 包。這些錯絕對和 PHP 無關。為了證明,你可以這樣做:$ cat >test.c <X$ gcc -E test.c >/dev/null
如果出錯,證明你的包含檔案受損了。
13. 我想升級 PHP,我在哪可以看到我現在執行的 PHP 的當初配置安裝時所使用的 ./configure 一行的內容?
你可以看你安裝 PHP 源目錄下的 config.nice 檔案. 如果不行還有另外一種方法。你只要簡單執行
指令碼在輸出頁面的第一行,就是 ./configure 行,是你當初用來配置PHP的那行。
14. 編譯帶 GD 庫的 PHP 時,它不是給一些奇怪的錯, 就是執行時產生 segfaults 段錯誤。
你必須確認你在編譯 GD 庫 和 PHP 時所使用同樣的依賴庫 (例如 libpng).
你必須安裝 GNU autoconf 包,這樣可以從 configure.in 生成配置指令碼檔案。只要執行在 CVS 伺服器得到原始碼的頂級目錄下的 ./buildconf。 (注意,除非你執行 configure --enable-maintainer-mode 選項, 配置指令碼是不會重新生成, 即使 configure.in 檔案已更新, 所以當你發現 configure.in 改變了,你也要手工做一遍. 在 config 或 config.status 執行後應該在你的 Makefile 裡能看到象 @VARIABLE@ 這樣的標號。)
2. 我在配置 PHP 在 Apache下工作時出了問題。
它說不能找到 httpd.h, 可是我看它就在那裡!你要告訴 configure/setup 指令碼 Apache 的頂級目錄的位置。就是說你要標明 --with-apache=/path/to/apache,而不是 --with-apache=/path/to/apache/src。
3. 當我執行 conifgure 時,它說它不能找到 include 檔案或 一些庫:GD,gdbm,或其它的一些包!
你可以看看 configure 指令碼,那些標頭檔案或非標準庫的位置,要送一些特殊的標誌給C前處理器。例如:CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
假如你的 shell 使用 csh-variant,那麼它將會是 (為什麼?): env CPPFLAGS=-I/path/to/include LDFLAGS=-L/path/to/library ./configure
4. 我在編譯檔案 language-parser.tab.c 時出錯,提示: yytname undeclared。
你需要更新你的 Bison 版本. 你可以在 找到最新版本。
5. 當我執行 make 起初正常但最終失敗了,在連線最後的應用時,出錯說找不到一些檔案。
一些老版本的 make 不能把 functions 目錄下的編譯的檔案放到同一個目錄下,試著執行 cp *.o functions 然後再執行 make 看看是否會好些。如果好了,你真的應該更新你的 GNU Make 的版本了。
6. 在連線 PHP 時, 出一堆錯說 undefined references。
看看檔案裡的連線行,確認所有的相關包都已經正確包含。通常這樣是因為缺少 '-ldl',還有一些你想支援的資料庫包。
如果你是在連線到 Apache 1.2.x,你記得要在在 EXTRA_LIBS 行增加一些額外的資訊 並且重執行 Apache's Configure 指令碼嗎? 參見發行包裡的 INSTALL 檔案。很多人說他們一增加 '-ldl' 馬上得到了 libphp4.a 。
7. 我不清楚怎樣在 Apache 1.3下編譯 PHP。
事實上很簡單,按下面的步驟:
取得 Apache 1.3 原始碼,在下面的位置
在某個目錄下解壓出來, 如 /usr/local/src/apache-1.3.
在PHP的發行包目錄下,編譯 PHP :./configure --with-apache=/
打入: make 然後: make install 編譯 PHP,拷必須的檔案到 Apache 目錄下。
改變到你的 /
輸入: ./Configure 然後: make。
這樣你就有了一個 httpd 檔案!
注意:你也可以使用新的 Apache ./configure 指令碼. 見發行包裡的 README.configure 當然也要看看PHP 發行包裡的 INSTALL 檔案。
8. 我按照步驟一步一步安裝了 Apache 模組(Unix下), 可是在瀏覽器裡開啟 PHP 指令碼時它卻問我是否要儲存。
這意味著你的 PHP 模組沒有被載入。你可從下面三點來檢查:
確認你執行的 Httpd 是你剛剛編譯了 PHP 的 Httpd. 可以執行:/path/to/binary/httpd -l
如果你沒有看到 mod_php4.c 列出來,那麼你執行了不正確的 Httpd。最好重新安裝它。
確認你在 Apache .conf 檔案裡增加了正確的 Mime 型別.它應該是這樣:AddType application/x-httpd-php3 .php3 ( PHP 3) 或 AddType application/x-httpd-php .php ( PHP 4) 也保證 AddType 這行沒有包括在
最後,Apache 1.2 和 Apache 1.3 預設的配置檔案的位置是不同的。你應該檢查你增加了 AddType 行的配置檔案的位置。你可以在 httpd.conf 放一些明顯的錯誤或改變,這樣如果這檔案被讀的話,系統會通知你。
9. 系統說使用: --activate-module=src/modules/php4/libphp4.a 可那檔案根本不存在,我只好改成 --activate-module=src/modules/php4/libmodphp4.a 但它不工作了!該怎麼辦?
請注意 libphp4.a 事實並不存在 .apache 程式會建立它!
10. 我要把 PHP 編譯成 Apache 的靜態模組,用: --activate-module=src/modules/php4/libphp4.a 可是系統說我的編譯器不是 ANSI 相容的。
這個錯誤訊息是 Apache 誤導的,可以用更新版本來修正它。
11. 我用 --with-apxs 編譯 PHP 時, 我總是得到一些奇怪的錯誤。
出現這樣的情況可以從三點來檢查。第一,因為某種原因 Apache 在編譯 apxs Perl 指令碼的時候,沒有建立適當的標誌變數,找到你的 apxs 指令碼 (試試命令 which apxs,通常在 /usr/local/apache/bin/apxs or /usr/sbin/apxs. 開啟它找到象下面這樣的行: my $CFG_CFLAGS_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = ' '; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = ' '; # substituted via Makefile.tmpl
如果你看到的是這樣,那麼問題就出在這裡. 因為值裡包含的是空格或其它不正確的值, 如 'q()'。把它樣變成象下面的那樣:my $CFG_CFLAGS_SHLIB = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmplmy $CFG_LD_SHLIB = 'gcc'; # substituted via Makefile.tmplmy $CFG_LDFLAGS_SHLIB = q(-shared); # substituted via Makefile.tmpl
第二種可能僅僅出現在 Red Hat 6.1 和 6.2上. apxs 指令碼 Red Hat 版有錯。看這行: my $CFG_LIBEXECDIR = 'modules'; # substituted via APACI install
如果你看到了,就把它改成下面的行:my $CFG_LIBEXECDIR = '/usr/lib/apache'; # substituted via APACI install
第三, 你要是 重配置 / 重安裝 Apache,必須在 ./configure 後,在 make之前,執行 make clean
12. 在 make 時, 我得到很多關於 microtime 錯誤, 還有許多 RUSAGE_ stuff.
在安裝過程中 make 時,如果你看到下面的錯:microtime.c: In function `php_if_getrusage':microtime.c:94: storage size of `usg' isn't knownmicrotime.c:97: `RUSAGE_SELF' undeclared (first use in this function)microtime.c:97: (Each undeclared identifier is reported only oncemicrotime.c:97: for each function it appears in.)microtime.c:103: `RUSAGE_CHILDREN' undeclared (first use in this function)make[3]: *** [microtime.lo] Error 1make[3]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[2]: *** [all-recursive] Error 1make[2]: Leaving directory `/home/master/php-4.0.1/ext/standard'make[1]: *** [all-recursive] Error 1make[1]: Leaving directory `/home/master/php-4.0.1/ext'make: *** [all-recursive] Error 1
那是你的系統出錯了。你應該修復 /usr/include 檔案.具體做法是安裝和你的 glibc 匹配的 glibc-devel 包。這些錯絕對和 PHP 無關。為了證明,你可以這樣做:$ cat >test.c <
如果出錯,證明你的包含檔案受損了。
13. 我想升級 PHP,我在哪可以看到我現在執行的 PHP 的當初配置安裝時所使用的 ./configure 一行的內容?
你可以看你安裝 PHP 源目錄下的 config.nice 檔案. 如果不行還有另外一種方法。你只要簡單執行
指令碼在輸出頁面的第一行,就是 ./configure 行,是你當初用來配置PHP的那行。
14. 編譯帶 GD 庫的 PHP 時,它不是給一些奇怪的錯, 就是執行時產生 segfaults 段錯誤。
你必須確認你在編譯 GD 庫 和 PHP 時所使用同樣的依賴庫 (例如 libpng).
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-947447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- lombok編譯遇到“找不到符號的問題”Lombok編譯符號
- Ubuntu16.04編譯VIORB過程中遇到的問題 尤其是rosbag的問題Ubuntu編譯ORBROS
- Laravel6.18.0 NPM 編譯時遇到的問題LaravelNPM編譯
- dos下編譯執行java程式遇到的問題編譯Java
- Linux ~ CentOS使用中遇到的問題LinuxCentOS
- 配置pycharm 編譯器時遇到的一些問題PyCharm編譯
- Latex — 寫作編譯過程中遇到問題記錄與總結編譯
- 關於C++&Java中命令列編譯的問題 (轉)C++Java命令列編譯
- linux遇到的問題Linux
- VC6.0編譯問題 (轉)編譯
- PHP中include()的使用問題 (轉)PHP
- linux新手最經常遇到的問題(轉)Linux
- Linux下C語言編譯的問題LinuxC語言編譯
- 面試中遇到的問題面試
- 編譯libodb-mysql.lib時遇到的一個問題編譯MySql
- 編譯Android14遇到lunch不顯示target的問題編譯Android
- 三個程式設計中遇到的小問題彙編程式設計
- vscode 自定義c++標頭檔案,編譯過程中遇到的問題VSCodeC++編譯
- php部署到nginx時遇到的問題PHPNginx
- Mac下安裝PHP遇到的問題MacPHP
- 如何避免學習linux必然會遇到的幾個問題Linux
- Linux 下部署Django專案你可能會遇到的問題!LinuxDjango
- GCC編譯遇到“a label can only be part of a statement and a declaration is not a statement”問題GC編譯
- 配置IIS,Apache,PHP過程中遇到的一些問題ApachePHP
- mini2440 編譯u-boot-1.1.6遇到的一些問題編譯boot
- 面試中會遇到的正則題面試
- php編寫大型網站問題集 (轉)PHP網站
- php編碼問題PHP
- Android Studio 編譯工程的時候遇到的問題 Unable to delete directoryAndroid編譯delete
- javaweb中自己遇到的問題JavaWeb
- laravel使用中遇到的問題Laravel
- Hodoop配置中遇到的問題OdooOOP
- 工作中遇到的問題
- linux下今天遇到的問題Linux
- SPI編譯問題編譯
- perl 編譯問題!編譯
- jive編譯問題編譯
- 【Java】程式設計過程中遇到的中文編碼問題Java程式設計