编译Glib 2.48不能识别支持UTF的PCRE

9

我已经从源代码编译了pcre 8.38,并加入了--enable-utf8 --enable-unicode-properties选项,用pcretest -C utf测试返回了1

执行which pcretest命令返回的路径是/home/mybin/bin/pcretest

但是,当使用PCRE_LIBS="/home/mybin/lib" PCRE_CFLAGS="/home/mybin/bin"编译glib 2.48时,会遇到一个报错,报错信息在configure.log文件中。

checking for PCRE... yes
checking for Unicode support in PCRE... no
configure: error: *** The system-supplied PCRE does not support Unicode properties or UTF-8.

是否还有其他需要检查的内容才能通过glib configure呢?


请查看 config.log 获取更详细的信息。 - TingPing
8个回答

7

我也遇到了这个问题。请确保你的LD_LIBRARY_PATH中包含了$PCRE_INSTALL_DIR/lib路径。这样做可以解决这个问题。


4
如果内部的glib pcre是可接受的选项,那么您可以在配置中使用--with-pcre

它可以工作。谢谢。Debian 10,glib-2.52.3,pcre-8.39。 - Alexander Lubyagin

4

首先,在配置过程中确保启用Unicode:

./configure --enable-utf --enable-unicode-properties

之后执行make命令。安装时,请使用以下命令:

make pkgconfigdir=/usr/lib/pkgconfig install

3
在安装libpcremake install步骤完成后,运行ldconfig。然后尝试在glib中运行./configure

2

./configure会通过编译一个小测试程序(第27618行)并运行它来测试UTF-8支持:

#include <pcre.h>
int main () {
    int support;
    pcre_config (PCRE_CONFIG_UTF8, &support);
    if (!support)
        return 1;
    pcre_config (PCRE_CONFIG_UNICODE_PROPERTIES, &support);
    if (!support)
        return 1;
    return 0;
}

如果测试程序不能正确编译和运行,或者由于任何原因返回1,那么./configure将会说没有UTF-8支持。请检查您的操作系统是否能够在PCRE lib目录中找到共享库。您可以通过编译上述测试程序并确保它可以运行而不会由于缺少共享库而崩溃来实现这一点。
我曾经遇到过这个问题,但即使我解决了它,Glib仍然无法检测到PCRE中的UTF-8支持。当发生这种情况时,您可以尝试编辑./configure以跳过该测试,但是失败的测试表明存在其他问题,因此我不建议这样做。

2

我在 GLib 的 README 中找到以下内容,这对我有用:

  • 现在默认使用系统自带的 PCRE 来实现 GRegex。如果没有或不需要系统 PCRE 版本,请使用 --with-pcre=internal 进行配置。

1

仅提供路径的PCRE_LIBS和PCRE_CFLAGS是不够的。

在我的情况下,使用pcre-8.38编译glib-2.52.3,我使用了
PCRE_CFLAGS="/usr/local/include"
PCRE_LIBS="/usr/local/lib"
但是得到了一个The system-supplied PCRE does not support Unicode properties or UTF-8的结果。 我按照config.log进行操作,它显示以下内容
configure:27740: checking for Unicode support in PCRE configure:27766: gcc -o conftest -g -O2 /usr/local/include -pthread conftest.c /usr/local/lib >&5 /usr/local/include: file not recognized: Is a directory collect2: ld returned 1 exit status configure:27766: $? = 1 configure: program exited with status 1

我更改了标志内容,变成了这样
PCRE_CFLAGS="-I/usr/local/include"
PCRE_LIBS="-L/usr/local/lib"
它告诉我
configure:27740: 检查 PCRE 中的 Unicode 支持 configure:27766: gcc -o conftest -g -O2 -I/usr/local/include -pthread conftest.c -L/usr/local/lib >&5 /tmp/cc8eu7d8.o:在函数‘main’中: /data1/rugalzhang/glib-2.52.3/conftest.c:178:对‘pcre_config’未定义的引用 /data1/rugalzhang/glib-2.52.3/conftest.c:181:对‘pcre_config’未定义的引用 collect2: ld 返回 1 退出状态 configure:27766: $? = 1 configure: 程序以状态 1 退出

有了这个,做出最后的更改
PCRE_CFLAGS="-I/usr/local/include"
PCRE_LIBS="-L/usr/local/lib -lpcre"
然后它就可以工作了


0

我甚至做了另一件事,使得glib 2.52.3能够与pcre 8.39编译成功。

LD_LIBRARY_PATH=$PREFIX/lib ./configure <...>

其中$PREFIX/lib是libpcre.so所在的位置。

如果不设置LD_LIBRARY_PATH,在config.log中:

./conftest: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

修改 PCRE_CFLAGS 或 PCRE_LIBS 没有帮助……


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接