在我的系统(Slackware64-14.1)中gawk
安装的是4.1.0版本。我想安装gawkextlib访问它的一些功能,即xml
.
来自以下README
文件gawkextlib-0.4.9
:
要使用这个库,您必须首先构建包含共享扩展库支持的新版本 gawk。请使用 gawk 4.1 或更高版本,或使用此配方从 git 源构建:
git clone git://git.savannah.gnu.org/gawk.git cd gawk
./bootstrap.sh ./configure --prefix=/tmp/newgawk make && make check && make install在 /tmp/newgawk 中构建并安装后,您可以像这样构建 gawkextlib :
使用 git: git clone git://git.code.sf.net/p/gawkextlib/code gawkextlib cd gawkextlib ./update-autotools
或者,如果您没有安装当前的自动工具,则使用 tarball 可能会更容易: tar xf gawkextlib-.tar.gz cd gawkextlib-
无论哪种方式,构建步骤都是相同的: ./configure --with-gawk=/tmp/newgawk --prefix=/tmp/newgawk make && make check && make install
该过程失败并显示:
/usr/bin/mkdir -p '/tmp/newgawk/lib/gawk' /bin/sh ../libtool
--mode=install ../build-aux/install-sh -c xml.la gd.la mpfr .la '/tmp/newgawk/lib/gawk' libtool: 安装:错误:无法将 `xml.la' 安装到不以 /usr/lib/gawk 结尾的目录 make[2]:* [安装-pkgextensionLTLIBRARIES] 错误 1
这不是一个大问题,因为我真的很想与现有的居住gawkextlib
集成。所以,当:gawk
/usr
$ ./configure --prefix=/usr --with-gawk=/usr
$ make && make test
# make install
一切安装正常。
# ls /usr/lib/libgawkextlib.*
/usr/lib/libgawkextlib.la /usr/lib/libgawkextlib.so /usr/lib/libgawkextlib.so.0 /usr/lib/libgawkextlib.so.0.0.0
但
$ awk -l xml
awk: fatal: can't open shared library `xml' for reading (No such file or directory)
从gawk
手册页:
-l
--load lib 加载共享库lib。这将使用 AWKLIBPATH 环境变量搜索库。如果初始搜索失败,则会在附加平台的默认共享库后缀后再次尝试。库初始化例程预计命名为 dl_load()。
设置后AWKLIBPATH
:
$ export AWKLIBPATH=/usr/lib
$ echo $AWKLIBPATH
/usr/lib
$ awk -l xml
awk: fatal: can't open shared library `xml' for reading (No such file or directory)
awk
又名gawk
找不到共享库。我在这里缺少什么?
答案1
由于没有答案,我在gawkextlib
邮件列表中询问了这个问题。该项目的作者之一 Andrew Schorr 建议可以使用以下命令:
./configure --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info
由于有一些多余的选项,我将其精简为:
./configure --datadir=/usr/share --libdir=/usr/lib64
并且gawkextlib
安装良好并且可以与gawk
.还可以添加选项--prefix=/usr
以将xmlgawk
脚本安装在/usr/bin
而不是/usr/local/bin
.
答案2
我刚刚遇到这个问题,詹姆斯·布朗的评论确实很有帮助。我必须添加以下环境变量:
export AWKLIBPATH=/usr/local/lib/gawk/ # path where xml.so exists
export LD_LIBRARY_PATH=/usr/local/lib/ # path where libgawkextlib.so.0 exists
但我认为从长远来看,路易斯的答案更好。根据Linux 文档项目:“LD_LIBRARY_PATH 对于开发和测试来说很方便,但不应该通过安装过程进行修改以供普通用户正常使用”