我正在尝试安装第五浏览器(网站) (github链接)在 Xubuntu 16.04.2 LTS 上。
我能够通过官方发行版存储库获取所有依赖项,并使用 Synaptic 进行安装。其中之一如 Fifth 主页上所列称为 liburlmatch (github链接)。它似乎是一个简单的库,可让您在使用通配符时阻止 URL。
我已经通过以下方式安装了 urlmatch:
/git clone https://github.com/clbr/urlmatch.git然后
/sudo checkinstall 在一个单独的文件夹中。这似乎完美无缺。
当我在第五个文件夹中执行 ./configure 时,最后几行如下所示:
checking for fltk-config13... no
checking for fltk-config... fltk-config
checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found
为了方便起见,您可以在以下 Pastebin 中找到与 urlmatch 有关的配置文件部分:liburlmatch 配置中的代码块。
我究竟做错了什么?为什么配置脚本无法识别 urlmatcher 库?请在您的回答中考虑这是我第一次尝试编译这样的程序,谢谢。
答案1
看起来问题实际上与 Fifth-5.0 的配置脚本如何构建和运行 urlmatch 库的 conftest 有关。
一、错误
checking for url_init in -lurlmatch... no
configure: error: liburlmatch not found
事实证明有些误导:如果我们查看,config.log
我们会发现由于对函数的未定义引用,conftest 实际上无法构建uncompress
:
configure:5511: checking for url_init in -lurlmatch
configure:5546: g++ -o conftest -g -O2 -pthread -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -isystem /usr/include/freetype2 -isystem /usr/include/cairo -isystem /usr/include/glib-2.0 -isystem /usr/lib/x86_64-linux-gnu/glib-2.0/include -isystem /usr/include/pixman-1 -isystem /usr/include/freetype2 -isystem /usr/include/libpng12 -fvisibility-inlines-hidden -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_THREAD_SAFE -D_REENTRANT -lz conftest.cpp -lurlmatch -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
//usr/local/lib/liburlmatch.a(opti_init.o): In function `initbin':
opti_init.c:(.text+0xd6): undefined reference to `uncompress'
collect2: error: ld returned 1 exit status
configure:5552: $? = 1
那是因为uncompress
is in libz
- 正在链接前 liburlmatch
:
. . . -lz conftest.cpp -lurlmatch -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
未能遵守两个库的必要链接顺序1 。我们可以进一步追溯到生成脚本configure.ac
的文件:configure
# Checks for libraries.
OLD_LDFLAGS=[$LDFLAGS]
LDFLAGS=["$LDFLAGS -lz"]
AC_CHECK_LIB([urlmatch], [url_init], [], AC_MSG_ERROR([liburlmatch not found]))
LDFLAGS=[$OLD_LDFLAGS]
即不是被添加到列表中LIBS
,而是-lz
被添加到LDFLAGS
(更通常用于指定附加库路径之前LIBS
)。
一个快速而肮脏的解决方法是./configure
使用显式LIBS
参数进行调用:
./configure "LIBS=-lz"
这会导致在命令行-lz
上放置额外的内容g++
后图书馆urlmatch
(在另一个的头部LIBS
):
. . . -lz conftest.cpp -lurlmatch -lz -Wl,-Bsymbolic-functions -lfltk_images -lfltk -lX11 >&5
更永久的解决方案可能是修改configure.ac
文件以添加-lz
到LIBS
而不是,然后使用LDFLAGS
重新生成(或如果需要)。configure
autoconf
autoreconf
参考文献: