setlocale()使用什么文件?

时间:2012-06-07 12:03:58

标签: c linux

不允许在共享的CentOS服务器上进行编译。因此,我在我的Debian计算机上编译我的程序,将它与Debian的系统库(如libc等)连接起来。然后我上传我的程序和Debian系统库,我的程序工作。唯一的问题是setlocale()在CentOS上不起作用。 CentOS已经安装了“en_US.utf8”并且可以在我的所有程序上运行。我怀疑我还要上传Debian的语言环境文件?我怎么能将我的程序链接到Debian语言环境文件?我试图使用LOCPATH,但我不确定它是如何工作的。我需要链接哪些文件以及如何链接?

C程序:

setenv("LOCPATH", "/", 1);

if (setlocale(LC_ALL, "en_US.utf8") == NULL) {
    puts("not set");
}

2 个答案:

答案 0 :(得分:0)

引用:LOCPATH is an environment variable that tells the setlocale() function the name of the directory from which to load locale object files. If LOCPATH is not defined, the default directory /usr/lib/nls/locale is searched. LOCPATH is similar to the PATH environment variable; it contains a list of z/OS UNIX directories separated by colons.

所以只需指定/并希望它进行递归搜索就行不通了。

您还可以生成静态二进制文件并将其上传到主机。

答案 1 :(得分:0)

我使用十六进制编辑器修改/usr/lib/locale/locale-archive的路径,setlocale()显然是strace根据{{1}}使用的唯一文件。这种方法很脏但很有用。

根据man LOCPATH,此环境变量是非标准的,因此不建议使用它。没有给出如何使用它的示例,也没有给出“locale的目标文件”路径的确切含义。

我想修改路径的唯一真正方法是glibc修改和重新编译。