不允许在共享的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");
}
答案 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修改和重新编译。