博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在php扩展开发中如何使用pkg-config
阅读量:6476 次
发布时间:2019-06-23

本文共 1746 字,大约阅读时间需要 5 分钟。

首先科普下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》

转载地址:http://epqko.baihongyu.com/

你可能感兴趣的文章
自定义Section
查看>>
在.NET开发中的单元测试工具之(2)——xUnit.Net
查看>>
Go之类型判断
查看>>
第二百五十二节,Bootstrap项目实战-首页
查看>>
Gray Code
查看>>
python 依照list中的dic的某key排序
查看>>
机器学习--详解人脸对齐算法SDM-LBF
查看>>
js中几种实用的跨域方法原理详解
查看>>
Go语言的基准测试简单示例
查看>>
PLSQL连接Oracle 数据库配置详解
查看>>
load函数
查看>>
gsp页面标签
查看>>
慎用Outline ,UGUI Outline实现原理分析
查看>>
权限表的设计
查看>>
Effective C++:规定24:如果所有的单位都需要的参数类型转换,使用请做到这一点non-member功能...
查看>>
iOS经典面试题(转)
查看>>
DELPHI 数学函数+字符处理函数
查看>>
分享几个.NET WinForm开源组件,纪念逐渐远去的WinForm。。。
查看>>
通过私有协议Chrome浏览器页面打开本地程序
查看>>
Python -- 标准库 文件管理 (部分os包,shutil包)
查看>>