[過去ログ]
Boostを語れゴラァ part3 (1001レス)
Boostを語れゴラァ part3 http://echo.5ch.net/test/read.cgi/tech/1158991211/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
508: デフォルトの名無しさん [sage] 2006/12/26(火) 16:16:15 すみませんが、質問です。 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のままで使う方法はないでしょうか? http://echo.5ch.net/test/read.cgi/tech/1158991211/508
510: 508 [sage] 2006/12/26(火) 19:42:26 追記です。 コンパイル時のエラーは、こんな単純なソースでも起こってしまいます。 エラー再現には、ソースにワイド文字リテラルが含まれる必要はありません。 ------------------ #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ではマルチバイト文字を使えということなのかもしれませんが、せっかく 対応しているのだからワイド文字を使いたいのです。 http://echo.5ch.net/test/read.cgi/tech/1158991211/510
512: 508 [sage] 2006/12/26(火) 20:20:55 >>511 ありがとうございます。 ref.hppの17行目でしょうか?そこを削除しても、やはり同じエラーが出ます。 他に気づいたことは、-finput-charset=utf8 などと書いても、「UTF-8に変換 できない」というエラーになることです。大文字ハイフン入りの「UTF-8」以外 受け付けません。 もしかしたらGCC自体が、テンプレートライブラリがUTF-8以外であることに対応 していないのでしょうか? http://echo.5ch.net/test/read.cgi/tech/1158991211/512
513: デフォルトの名無しさん [sage] 2006/12/26(火) 20:38:10 >>508 この辺を参考に http://search.gmane.org/?query=windows+unicode+gcc&group=gmane.comp.gcc.devel http://permalink.gmane.org/gmane.comp.gcc.devel/78542 >>512 インクルードファイルの中に他にも含まれていないか チェック。utility/enable_if.hpp とか $ iconv -l で使用できる文字コードは分かる http://echo.5ch.net/test/read.cgi/tech/1158991211/513
514: 508 [sage] 2006/12/26(火) 21:08:11 >>513 ありがとうございます。よく読んでいませんが、結局コードの変換ルールが問 題ということでしょうか。 grep -r Jaakko /usr/include/boost/ これで検索したところ66件ありました。他にもlatin-1の名前はあるかもしれ ません。さすがに直す気が失せました。 とりあえず、コンパイル前にiconvをかけることにします。いずれはUTF-8環境 に移行した方が良さそうです。 http://echo.5ch.net/test/read.cgi/tech/1158991211/514
515: 508 [sage] 2006/12/27(水) 00:25:09 http://permalink.gmane.org/gmane.comp.gcc.devel/78542 を読んで思ったのですが、どうやら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とあんまり関係なくてすみません。 http://echo.5ch.net/test/read.cgi/tech/1158991211/515
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.026s