Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
前陣子幫這台主機升級 PHP 的時候,失敗了幾次,
從 log 檔裡面發現了幾個跳錯的點,順手記下來,下次可以先注意一下。
雖然使用的是 lnmp.org 提供的堆疊指令碼 (stack scripts),照理說不應該會有什麼太大問題,
但是這中間我曾經將主機的作業系統,從 Ubuntu 16 升級到 18.04,
所以可能有些函式庫的連結出錯,導致這樣的結果。
但因為時間有點久遠,當初也沒做紀錄,所以很多珍貴的錯誤都沒辦法留存。
回到正題,這次主要出現錯誤的原因有三個(分別各解了一次),在這裡先說結論:
在編譯階段出問題的時候,先檢查 /usr/lib 裡面是否缺乏所需函式庫,沒有的話先安裝,如果有的話,再檢查是否為同步連結的問題(連結到不存在的路徑)。
內容目錄
由於不同版本與不同指令碼安裝的主機環境不盡相同,產生的結果也會不同,
因此在這裡先說明主機環境,方便有興趣的人進行再現 (represent)。
checking for libcurl.pc... using default path
checking for cURL 7.15.5 or greater... configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
make: *** No targets specified and no makefile found. Stop.
make: *** No targets specified and no makefile found. Stop.
make: *** No rule to make target 'install'. Stop.
Copy new php configure file...
這個原因比較有可能是當初升級 Ubuntu 的時候,
便宜行事使用舊版的 cURL(當時好像有部分程式與 cURL 4 不相容,所以硬是手動安裝了 cURL 3)所導致的結果,不難解決,只要安裝該套件就好。
$ sudo apt-get install libcurl4-gnutls-dev
If configure fails try --with-webp-dir=<DIR>
checking for jpeg_read_header in -ljpeg... yes
configure: error: png.h not found.
Google 了之後發現,有可能是 libpng 這個函示庫沒有正確安裝。因此手動安裝了一下:
$ sudo apt-get install libpng-dev
/usr/bin/ld: cannot find -lpng12
collect2: error: ld returned 1 exit status
Makefile:293: recipe for target 'sapi/cli/php' failed
make: *** [sapi/cli/php] Error 1
這個問題稍微花了一點時間。
錯誤的原因是無法找到名為 libpng12 的函式庫, ( -lxxx 代表 libxxx 函式庫)
但照理說前一個步驟應該就將函式庫安裝好了才對。
於是前往 /usr/lib 看是哪裡發生問題,發現原本的 libpng12.so 連結的位置並不存在,
因此重新做了同步連結:
$ sudo ln /usr/lib/libpng12.so.0 libpng12.so
完成了上述的修改後,再重新升級 PHP,這次就能完整編譯了。
處理完問題,並再仔細回顧了幾則 Stack Overflow 之後,根本的問題也有可能是 Ubuntu 18 的函式庫路徑和原本不同。
以 libpng 而言,/usr/include/png.h 有可能被移至 /usr/include/libpng/png.h,導致無法使用該指令。解決方式之一,是用 symlink 的方式,將該路徑與正確路徑做同步連結:
$ ln -s /usr/include/libpng/png.h /usr/include/png.h