搜尋
首頁後端開發php教程編譯問題_PHP教程

編譯問題_PHP教程

Jul 21, 2016 pm 04:10 PM
匿名的情況最新版原始碼編譯錯誤問題


這章節蒐集了許多編譯時會產生的錯誤狀況。 1. 我用匿名CVS得到最新版的源代碼包, 但沒有配置腳本文件! 2. 我在配置 PHP 在 Apache下工作時出了問題。 它說不能找到httpd.h, 可是我看它就在那裡! 3. 當我運行conifgure時,它說它不能找到include文件或一些庫: GD, gdbm, 或其它的一些包! 4. 我在編譯文件language-parser.tab.c時, 出錯,提示: yytname undeclared. 5. 當我運行make, 起初正常但最終失敗了,在連接最後的應用時,出錯說找不到一些文件。 6. 在連接 PHP 時, 出一堆錯說 undefined references。 7. 我不清楚如何在 Apache 1.3下編譯PHP。 8. 我依照步驟一步一步安裝了Apache模組(Unix下), 可是在瀏覽器裡開啟 PHP 腳本時它卻問我是否要儲存。 9. 系統說使用: --activate-module=src/modules/php4/libphp4.a, 可那檔案根本不存在, 我只好改成--activate-module=src/modules/php4/libmodphp4.a 好了,它不工作了! 該怎麼辦? 10. 我要把PHP編譯成Apache的靜態模組,用: --activate-module=src/modules/php4/libphp4.a 可是系統說我的編譯器不是ANSI 相容的。 11. 當我用 --with-apxs編譯PHP時, 我總是得到一些奇怪的錯誤。 12. 在make時, 我得到很多關於microtime錯誤, 還有許多RUSAGE_ stuff. 13. 我想升級PHP,我在哪可以看到我現在運行的PHP 的當初配置安裝時所使用的./configure 一行的內容? 14. 編譯帶GD庫的PHP時,它不是給一些奇怪的錯, 就是執行時產生segfaults 段錯誤.
1. 我用匿名CVS得到最新版的源代碼包, 但沒有配置腳本文件!
你必須安裝GNU autoconf 包,這樣可以從configure.in生成配置腳本文件. 只要運行在CVS伺服器得到源代碼的頂級目錄下的./buildconf。 (注意, 除非你運行configure --enable-maintainer-mode 選項, 配置腳本是不會重新生成, 即使configure.in 文件已更新, 所以當你發現configure.in 改變了,你也要手工做一遍. 在config或config.status 運行後應該在你的Makefile裡能看到像@VARIABLE@這樣的標號。 它說不能找到 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 版本. 你可以在ftp://ftp.gnu.org/pub/gnu/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 原始碼,在下面的位置 http://www.apache.org/dist/.
在某目錄下解壓縮出來, 如 /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     S_SHLIB = ' ';          # substituted via Makefile.tmpl如果你看到的是這樣,那麼問題就出在這裡. 因為值裡包含的是空格或其它不正確的值, 如'q()'. 把它樣變成像下面的那樣: my $CFG_CFLAGS_SHLIB  = '-fpic -DSHARED_MODULE'; # substituted via Makefile.tmplmy $CFG_LD_SHLIB      .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. undeclared identifier 是 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. 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). 

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314067.htmlTechArticle這章節蒐集了許多編譯時會產生的錯誤狀況。 1. 我用匿名CVS得到最新版的源代碼包, 但沒有配置腳本文件! 2. 我在配置 PHP 在 Apache下工作時...
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
可以在PHP會話中存儲哪些數據?可以在PHP會話中存儲哪些數據?May 02, 2025 am 12:17 AM

phpsessionscanStorestrings,數字,數組和原始物。

您如何開始PHP會話?您如何開始PHP會話?May 02, 2025 am 12:16 AM

tostartaphpsession,usesesses_start()attheScript'Sbeginning.1)placeitbeforeanyOutputtosetThesessionCookie.2)useSessionsforuserDatalikeloginstatusorshoppingcarts.3)regenerateSessiveIdStopreventFentfixationAttacks.s.4)考慮使用AttActAcks.s.s.4)

什麼是會話再生,如何提高安全性?什麼是會話再生,如何提高安全性?May 02, 2025 am 12:15 AM

會話再生是指在用戶進行敏感操作時生成新會話ID並使舊ID失效,以防會話固定攻擊。實現步驟包括:1.檢測敏感操作,2.生成新會話ID,3.銷毀舊會話ID,4.更新用戶端會話信息。

使用PHP會話時有哪些性能考慮?使用PHP會話時有哪些性能考慮?May 02, 2025 am 12:11 AM

PHP会话对应用性能有显著影响。优化方法包括:1.使用数据库存储会话数据,提升响应速度;2.减少会话数据使用,只存储必要信息;3.采用非阻塞会话处理器,提高并发能力;4.调整会话过期时间,平衡用户体验和服务器负担;5.使用持久会话,减少数据读写次数。

PHP會話與Cookie有何不同?PHP會話與Cookie有何不同?May 02, 2025 am 12:03 AM

PHPsessionsareserver-side,whilecookiesareclient-side.1)Sessionsstoredataontheserver,aremoresecure,andhandlelargerdata.2)Cookiesstoredataontheclient,arelesssecure,andlimitedinsize.Usesessionsforsensitivedataandcookiesfornon-sensitive,client-sidedata.

PHP如何識別用戶的會話?PHP如何識別用戶的會話?May 01, 2025 am 12:23 AM

phpIdentifiesauser'ssessionSessionSessionCookiesAndSessionId.1)whiwsession_start()被稱為,phpgeneratesainiquesesesessionIdStoredInacookInAcookInAcienamedInAcienamedphpsessIdontheuser'sbrowser'sbrowser.2)thisIdallowSphptpptpptpptpptpptpptpptoretoreteretrieetrieetrieetrieetrieetrieetreetrieetrieetrieetrieetremthafromtheserver。

確保PHP會議的一些最佳實踐是什麼?確保PHP會議的一些最佳實踐是什麼?May 01, 2025 am 12:22 AM

PHP會話的安全可以通過以下措施實現:1.使用session_regenerate_id()在用戶登錄或重要操作時重新生成會話ID。 2.通過HTTPS協議加密傳輸會話ID。 3.使用session_save_path()指定安全目錄存儲會話數據,並正確設置權限。

PHP會話文件默認存儲在哪裡?PHP會話文件默認存儲在哪裡?May 01, 2025 am 12:15 AM

phpsessionFilesArestoredIntheDirectorySpecifiedBysession.save_path,通常是/tmponunix-likesystemsorc:\ windows \ windows \ temponwindows.tocustomizethis:tocustomizEthis:1)useession_save_save_save_path_path()

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具