0

共有CentOSサーバーでのコンパイルは許可されていません。そのため、Debianコンピュータでプログラムをコンパイルし、libcなどのDebianのシステムライブラリとリンクします。次に、プログラムと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を使用する唯一のファイルであると思われるパスを変更するために、16進エディタをsetlocale()使用しましたstrace。この方法は汚れていますが、うまくいきました。

man LOCPATHによると、この環境変数は非標準であるため、使用はお勧めしません。それを使用する方法や、「ロケールのオブジェクトファイル」へのパスが正確に意味するものの例はどこにも示されていません。

パスを変更する唯一の実際の方法は、glibcの変更と再コンパイルだと思います。

于 2012-06-09T11:28:15.980 に答える
-1

Quote: 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.

So just specifying / and hoping that it does a recursive search will not work.

You could also produce a static binary and upload that to the host.

于 2012-06-07T13:49:15.377 に答える