登录  /  注册
在php扩展开发中如何使用pkg-config
高洛峰
发布:2016-10-14 10:49:51
原创
878人浏览过

首先科普下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
热门教程
更多>
最新下载
更多>
  • 中小型创业创意公司网站模板
  • 管道维修家政服务登录页模板
  • 儿童公益慈善机构宣传网站模板
网站特效
网站源码
网站素材
前端模板
关于我们免责申明意见反馈讲师合作广告合作技术文章
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2023//m.sbmmt.com/ All Rights Reserved | 苏州跃动光标网络科技有限公司 | 苏ICP备2020058653号-1

 | 本站CDN由 数掘科技 提供

登录PHP中文网,和优秀的人一起学习!
全站2000+教程免费学