[過去ログ] Boostを語れゴラァ part3 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
508(5): 2006/12/26(火)16:16 AAS
すみませんが、質問です。
Debian Sarge(EUC-JP)上でBoostのsplitなどをを使いたいのですが、ソースコー
ドの文字列をEUC-JPにするとエラーになってしまいます。
#include <boost/algorithm/string.hpp> を含むソースで
g++-3.4 -finput-charset=EUC-JP -fexec-charset=EUC-JP test05.cpp -o test05
を実行すると、
/usr/include/boost/function/function_base.hpp:23:25: failure to convert EUC-JP to UTF-8
このようなエラーに。
なお、ソースではwchar_t, wstringを使っています。
ソースをUTF-8に、オプションを-finput-charset=UTF-8 にすると動くように
なりますが、やはりこれは不便です。
ソースをEUC-JPのままで使う方法はないでしょうか?
510(1): 508 2006/12/26(火)19:42 AAS
追記です。
コンパイル時のエラーは、こんな単純なソースでも起こってしまいます。
エラー再現には、ソースにワイド文字リテラルが含まれる必要はありません。
------------------
#include <boost/algorithm/string.hpp>
int main(void)
{
return 0;
}
------------------
g++-3.4 -finput-charset=EUC-JP -fexec-charset=EUC-JP test06.cpp -o test06
↓
/usr/include/boost/function/function_base.hpp:23:25: failure to convert EUC-JP \to UTF-8
EUC-JPではマルチバイト文字を使えということなのかもしれませんが、せっかく
対応しているのだからワイド文字を使いたいのです。
512(1): 508 2006/12/26(火)20:20 AAS
>>511
ありがとうございます。
ref.hppの17行目でしょうか?そこを削除しても、やはり同じエラーが出ます。
他に気づいたことは、-finput-charset=utf8 などと書いても、「UTF-8に変換
できない」というエラーになることです。大文字ハイフン入りの「UTF-8」以外
受け付けません。
もしかしたらGCC自体が、テンプレートライブラリがUTF-8以外であることに対応
していないのでしょうか?
513(1): 2006/12/26(火)20:38 AAS
>>508
この辺を参考に
外部リンク:search.gmane.org
外部リンク:permalink.gmane.org
>>512
インクルードファイルの中に他にも含まれていないか
チェック。utility/enable_if.hpp とか
$ iconv -l
で使用できる文字コードは分かる
514: 508 2006/12/26(火)21:08 AAS
>>513
ありがとうございます。よく読んでいませんが、結局コードの変換ルールが問
題ということでしょうか。
grep -r Jaakko /usr/include/boost/
これで検索したところ66件ありました。他にもlatin-1の名前はあるかもしれ
ません。さすがに直す気が失せました。
とりあえず、コンパイル前にiconvをかけることにします。いずれはUTF-8環境
に移行した方が良さそうです。
515: 508 2006/12/27(水)00:25 AAS
外部リンク:permalink.gmane.org
を読んで思ったのですが、どうやらUTF-8にすれば完全解決というわけではな
いようですね。
g++ -finput-charset=EUC-JP
こう書くと、GCCはソースファイルを、includeされるヘッダライブラリまです
べてEUC-JPだとみなします。そしてそれを libiconv で UTF-8 に変換しよう
とします。このとき(ヘッダファイルに)EUC-JPに含まれない文字コード
(Latin-1など)があったらエラーになってしまいます。
g++ -finput-charset=UTF-8 (または-finput_charsetの指定なし)
こう書くと、GCCはソースファイルを、includeされるヘッダライブラリまです
べてUTF-8だとみなします。しかし今度は変換の必要がないので、libiconv は
呼ばれません。ヘッダライブラリも変換されません。
これで通常は問題はなくなるわけです。しかし、
・ヘッダライブラリのエンコーディングがUTF-8でない。
・ヘッダライブラリに wcha_tのリテラルがある。
(あまりないでしょうが、)この2つが同時に起こると、ライブラリは正しく
動作しません。
結局、すべてのヘッダファイルがUTF-8で統一されるか、Pythonのように各ソー
スファイルにエンコーディングの宣言ができるようにしないと、完全解決とは
言えないようです。いずれも一ユーザにはどうしようもない話ですが。
Boostとあんまり関係なくてすみません。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.029s