考虑到嵌入式平台的存储和运行空间都有限,在向目标平台移植时肯定要对minigui及其组件进行剪裁,删除掉不需要的功能和特性,以缩小程序体积,对mgncs做剪裁时遇到了一个非常奇怪的问题,虽然解决了,但现在也没找到根本原因:
根据configure --help
的提示使用--enable-fashionrdr=no
禁用fashion 渲染器(fashion render) 时报错了.
错误信息(片段)如下:
./configure --enable-fashionrdr=no .....checking for xmlFree in -lxml2... yeschecking for MINIGUI... noconfigure: error: in `/home/gyd/workspace/facelock/dependencies/libmgncs-1.2.0':configure: error: The pkg-config script could not be found or is too old. Make sure itis in your PATH or set the PKG_CONFIG environment variable to the fullpath to pkg-config.Alternatively, you may set the environment variables MINIGUI_CFLAGSand MINIGUI_LIBS to avoid the need to call pkg-config.See the pkg-config man page for more details.To get pkg-config, see <http://pkg-/>.See `config.log' for more details
错误提示非常明确找不到pkg-config
,但明明我是安装了pkg-config
而且可以正常使用的。
如果我不使用--enable-fashionrdr=no
这个参数禁用fashion render,configure
就可以正常执行。显然问题不出在是不是安装pkg-config
于是找到configure.ac
中与--enable-fashionrdr
相关的代码,如下:
上面的逻辑很清楚,enable_rdr_fashion
中存储了命令行输入的--enable-fashionrdr
的值(enable_rdr_fashion
默认为在代码最开始设置为yes
),
当--enable-fashionrdr=yes
时,会执行PKG_CHECK_MODULES([MGPLUS], [mgplus >= 1.4.0])
,检查minigui的mgplus组件是否安装。而为no
时,不会执行这个动作。于是我做了个简单的测试,删除PKG_CHECK_MODULES([MGPLUS], [mgplus >= 1.4.0])
这一行,则即使不指定--enable-fashionrdr=no
,也会报错了。
所以可以总结:只要执行了PKG_CHECK_MODULES([MGPLUS], [mgplus >= 1.4.0])
就不会报错。
于是我做了如下修改:不论--enable-fashionrdr
为yes
或no
,都执行PKG_CHECK_MODULES([MGPLUS], [mgplus >= 1.4.0])
,就不再报错
为什么?!
按理说pkg-config
检查MiniGUI
与检查mGPlus
是相互独立,互不影响的事件,
但是事实就是PKG_CHECK_MODULES([MGPLUS], [mgplus >= 1.4.0])
这一行是否执行会影响到后面的PKG_CHECK_MODULES([MINIGUI], [minigui >= 3.2.0])
,两个看似没有逻辑关系的事件产生了关联。
太奇怪了,到现在也没找到原因。