奇怪的“LIBTOOL undefined”
奇怪的“LIBTOOL undefined”
场景介绍:
同一套代码,同一个编译服务器,相同的编译脚本,不同的用户A和B,但相同的环境变量PATH,A先编译,编译成功,B后编译,编译失败。B百思不得其解,这是为什么啊啊啊啊啊?
难道真有先行者的编译优势吗?
- 由于同处一个编译服务器,且没有做好环境隔离,这种情况往往就是因为A编译的时候已经污染了编译服务器主机环境。即编译动作对一些共享目录产生了影响;
- 共享目录一般指的是/usr/bin、/usr/local这样的目录,应该是为了创建隔离环境install的时候,install错误了位置;
解决方法
aclocal是个扫描程序, 负责扫描configure.ac中所有的宏定义并展开,问题产生的原因就是找不到LIBTOOL宏的定义之处造成的,也就是aclocal与libtool没有安装在一个相同目录下面。
方法1: 可以直接将libtool的m4宏文件拷贝到aclocal执行目录下;
方法2: 添加aclocal的执行目录加入$PATH;(aclocal --print-ac-dir的路径加入$PATH,置于PATH最前面)
总结
嵌入式开发中为了编译环境的隔离独立,往往会将编译工具放入SDK目录下的host目录,所以注意PATH的增加,是需要将host优先级提高的。