0

不允许在共享的 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");
}
4

2 回答 2

0

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

根据man LOCPATH,这个环境变量是非标准的,所以不推荐使用它。没有给出如何使用它的示例,也没有给出“语言环境的目标文件”路径的确切含义。

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

于 2012-06-09T11:28:15.980 回答
-1

引用: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.

因此,仅仅指定/并希望它进行递归搜索是行不通的。

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

于 2012-06-07T13:49:15.377 回答