gpt4 book ai didi

c - 让语言环境函数在 glibc 中工作

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:12 25 4
gpt4 key购买 nike

我需要对 C 标准库 (glibc) 进行一些修改以获得一些性能改进。具体来说,我将编写一些特定于语言环境的函数(在 glibc 中表现不佳)的一些专用版本,例如 strcoll

我已经从 here 查看了 glibc 源代码, 进入 ~/Desktop/glibc。然后,我无误地运行了以下命令序列。

$ cd ~/Desktop
$ mkdir bglibc
$ cd bglibc
$ ./../glibc/configure --prefix=~/Desktop/bglibc
$ make
$ make install

至此,我已经成功编译安装了glibc到~/Desktop/bglibc。然后我在 bglibc 目录中创建了以下测试程序 (ct.c):

#include <stdio.h>
#include <locale.h>

int main ()
{
char *locale = NULL;
locale = "en_US.utf8";

char *result = setlocale(LC_COLLATE, locale);
if (result == NULL) {
printf("locale not set\n");
}

printf("strcoll: %d\n", strcoll("some", "string"));

return 0;
}

然后我用这个脚本构建它:

iSYSROOT=~/Desktop/bglibc

gcc -o ct ct.c \
--sysroot=${SYSROOT} \
-Wl,-rpath=${SYSROOT}/lib \
-Wl,--dynamic-linker=${SYSROOT}/lib/ld.so.1

正确构建它。然后我用这个脚本运行它:

#!/bin/sh
builddir=`dirname "$0"`
GCONV_PATH="${builddir}/iconvdata" \
exec "${builddir}"/elf/ld-linux-x86-64.so.2 --library-path "${builddir}":"${builddir}"/*:"${builddir}"/*/*:"${builddir}"/*/*/* ${1+"$@"}

这是名称 testrun.sh。要在我之前编译的程序 (ct) 上运行它,我运行 ./testrun.sh ./ct

这成功运行了程序,但是程序打印出 locale not set,这意味着它无法将区域设置为 "en_US.utf8"。因此,语言环境保留默认值 ("C"),在这种情况下 strcoll 仅返回 strcmp 的结果。但是,我需要此调用来运行 strcoll 代码,以便对其性能进行测试,然后调整它以针对特定区域设置运行得更快。

我知道 "en_US.utf8" 是我系统(Ubuntu 12.04 lts)的有效语言环境,因为我看到了这个:

$ locale -a | grep US
en_US.utf8

我也试过运行这个程序,但将语言环境变量设置为其他字符串,例如 "en_US.UTF-16"、"""en_US .UTF-8" 等都没有运气。

我想这不是我在尝试让区域设置与我修改后的 glibc 版本一起工作时遇到的第一个问题,但它是第一个。

关于如何使语言环境功能(特别是 setlocale)正常工作,有什么想法吗?

最佳答案

我的猜测:您忘记“制作”一些语言环境。尝试:

$ make
$ make install
$ make localedata/install-locales

另见 GNU libc make manual

After installation you might want to configure the timezone and locale installation …

关于c - 让语言环境函数在 glibc 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com