ホームページ  >  記事  >  类库下载  >  PHP拡張機能の開発でpkg-configを使用する方法

PHP拡張機能の開発でpkg-configを使用する方法

高洛峰
高洛峰オリジナル
2016-10-14 10:49:511293ブラウズ

まず、pkg-config で何ができるかを学びましょう。 Wikipedia には pkg-config について次のような記載があります:
pkg-config は、ソース コードからソフトウェアをコンパイルするときに、インストールされているライブラリをクエリするための統合インターフェイスを提供するコンピューター ソフトウェアです。 pkg-config は元々 Linux 用に設計されましたが、現在では BSD、Windows、Mac OS X、Solaris のさまざまなバージョンで利用できるバージョンがあります。
簡単に言えば、pkg-config は主に次の機能を提供します:

1. ライブラリのバージョン番号を確認します。必要なライブラリのバージョンが要件を満たしていない場合は、間違ったバージョンのライブラリ ファイルがリンクされるのを避けるためにエラー メッセージが出力されます。
2. マクロ定義やヘッダー ファイルの場所などのコンパイル前処理パラメータを取得します。
3. ライブラリやその他の依存ライブラリの場所、ファイル名、その他の接続パラメータなどのリンク パラメータを取得します。
4. 依存する他のライブラリの設定を自動的に追加します。

最近、opencv を使用して画像をトリミングするための php 拡張機能を開発しました。 Opencv は多くのライブラリをロードする必要があり、それらを手動で config.m4 に追加するのは非常に面倒で、ポストメンテナンスを活用できません。幸いなことに、opencv には opencv.pc ファイルが用意されているため、pkg-config を使用してコンパイル済みパラメータを自動的に取得できます。

以下は、opencv 関連の so ライブラリとヘッダー ファイルを自動的にロードするために config.m4 に書いたコードです。

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 までご連絡ください。
前の記事:php-fpm起動エラー次の記事:php-fpm起動エラー

関連記事

続きを見る