gawk 与 gawkextlib

gawk 与 gawkextlib

在我的系统(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 对于开发和测试来说很方便,但不应该通过安装过程进行修改以供普通用户正常使用”

相关内容