Heim  >  Artikel  >  类库下载  >  So verwenden Sie pkg-config bei der Entwicklung von PHP-Erweiterungen

So verwenden Sie pkg-config bei der Entwicklung von PHP-Erweiterungen

高洛峰
高洛峰Original
2016-10-14 10:49:511293Durchsuche

Lassen Sie uns zunächst erfahren, was pkg-config tun kann. Hier ist die Wikipedia-Beschreibung von pkg-config:
pkg-config ist eine Computersoftware, die eine einheitliche Schnittstelle zum Abfragen installierter Bibliotheken beim Kompilieren von Software aus Quellcode bereitstellt. pkg-config wurde ursprünglich für Linux entwickelt, aber jetzt sind Versionen für verschiedene Versionen von BSD, Windows, Mac OS X und Solaris verfügbar.
Einfach ausgedrückt bietet pkg-config hauptsächlich die folgenden Funktionen:

1. Überprüfen Sie die Versionsnummer der Bibliothek. Wenn die Version der erforderlichen Bibliothek die Anforderungen nicht erfüllt, wird eine Fehlermeldung ausgegeben, um zu vermeiden, dass die falsche Version der Bibliotheksdatei verknüpft wird.
2. Ermitteln Sie die Vorverarbeitungsparameter für die Kompilierung, z. B. Makrodefinitionen und den Speicherort der Header-Dateien.
3. Linkparameter abrufen, z. B. den Speicherort der Bibliothek und anderer abhängiger Bibliotheken, Dateinamen und andere Verbindungsparameter.
4. Fügen Sie automatisch Einstellungen für andere Bibliotheken hinzu, von denen es abhängt.

Kürzlich eine PHP-Erweiterung für das Zuschneiden von Bildern mit opencv entwickelt. Opencv muss viele SO-Bibliotheken laden. Es ist zu mühsam, sie manuell zu config.m4 hinzuzufügen, und die Nachwartung wird nicht genutzt. Glücklicherweise stellt opencv die Datei opencv.pc bereit, sodass Sie pkg-config verwenden können, um die kompilierten Parameter automatisch abzurufen.

Das Folgende ist der Code, den ich in config.m4 geschrieben habe, um OpenCV-bezogene Bibliotheken und Header-Dateien automatisch zu laden.

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

Hinweis:
Bitte verwenden Sie keine geschweiften Klammern im bedingten Teil von if, da sonst Syntaxfehler im von m4 generierten Makefile auftreten.

Referenzdokument
http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/ „Grundlegendes zum pkg-config-Tool“
http://www.php .net/manual/zh/internals2.buildsys.configunix.php „Interaktion mit dem UNIX-Build-System: config.m4“


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP-FPM-StartfehlerNächster Artikel:PHP-FPM-Startfehler

In Verbindung stehende Artikel

Mehr sehen