首頁  >  文章  >  类库下载  >  在php擴充開發中如何使用pkg-config

在php擴充開發中如何使用pkg-config

高洛峰
高洛峰原創
2016-10-14 10:49:511249瀏覽

首先科普下pkg-config能幹啥。以下是維基百科對pkg-config的說明:
pkg-config 是一個提供從原始碼編譯軟體時查詢已安裝的函式庫時所使用的統一介面的電腦軟體。 pkg-config原本是設計給Linux的,但現在在各個版本的BSD、windows、Mac OS X和Solaris上都有可用的版本。
簡單的說,pkg-config主要提供以下幾個功能:

1、檢查庫的版本號。如果所需的庫的版本不滿足要求,它會列印錯誤訊息,避免連結錯誤版本的庫檔案。
2、取得編譯預處理參數,如巨集定義,頭檔的位置。
3、取得連結參數,如程式庫及依賴的其它庫的位置,檔案名稱及其它一些連接參數。
4、自動加入所依賴的其它庫的設定。

最近開發一個用於圖片裁剪的php擴充用到了opencv。 opencv需要載入的so函式庫很多,手動加入到config.m4中,太麻煩,也不利用後製維護。幸好opencv提供了opencv.pc文件,這樣就可以使用pkg-config自動取得編譯的參數。

下面是我在config.m4中寫的自動載入opencv相關so函式庫和頭檔的程式碼。

dnl # --with-tclip -> check with-path
  SEARCH_PATH="/usr/lib/pkgconfig" # 定义pkgconfig文件,即扩展名pc文件存放路径
  SEARCH_FOR="opencv.pc"  # 要寻找的文件
  if test -r $PHP_TCLIP/$SEARCH_FOR; then # 
     TCLIP_DIR=$PHP_TCLIP
  else # search default path list
     AC_MSG_CHECKING([for tclip files in default path])
     for i in $SEARCH_PATH ; do
       if test -r $i/$SEARCH_FOR; then
         TCLIP_DIR=$i
         AC_MSG_RESULT(found in $i)
       fi
     done
  fi
  dnl
  if test -z "$TCLIP_DIR"; then
     AC_MSG_RESULT([not found])
     AC_MSG_ERROR([Please reinstall the tclip distribution])
  fi
  
  OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv`"
  for i in $OPENCV_FLAGS;do
        if test ${i:0:2} = "-I" ;then
                PHP_ADD_INCLUDE(${i:2})
        elif test ${i:${#i}-3} = ".so" ;then
                dir_name=`dirname $i`
                file_name=${i/$dir_name/}
                file_name=${file_name/\/lib/}
                file_name=${file_name/.so/}
        PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD)
        fi
  done

注意:
if的條件部分請不要用大括號的方式,否則m4產生的makefile檔案中會有語法錯誤。

參考文件
http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/ 《理解pkg-config 工具》
http://www.php.net/manual/zh/internals2 .buildsys.configunix.php 《與UNIX 建置系統互動: config.m4》


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

相關文章

看更多