[過去ログ] Boostを語れゴラァ part3 (1001レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
503: 2006/12/24(日)17:51 AAS
ublas今試してるんだけど、
VC++2005でboost1.33_1だとsparse_matrixとsparse_vectorは定義されていないと怒られてしまう。
matrix_sparse.hppとvector_sparse.hppはきちんとインクルードしているんだけど、なぜに?
504
(1): 2006/12/24(日)18:41 AAS
しかも、mat[i][j]とかで行列の要素にアクセスするとか、lu_factorizeもコンパイルエラー。なんでやろ・・・。
505: 2006/12/24(日)18:49 AAS
エラーメッセージも張らずに日記かよ。いい加減にしろ
506: 2006/12/25(月)13:27 AAS
>>504
mat[i][j]の書き方はできなくなった
今は
mat(i,j)
507: 2006/12/25(月)13:47 AAS
Boost.Python でPythonから呼ぶようにした関数って
Cとして呼ぶよりも処理が遅くなったりするの?
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のままで使う方法はないでしょうか?
509: 2006/12/26(火)18:55 AAS
age
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ではマルチバイト文字を使えということなのかもしれませんが、せっかく
対応しているのだからワイド文字を使いたいのです。
511
(1): 2006/12/26(火)19:56 AAS
>>510
boost/ref.hppがLatin-1で書かれているのが問題っぽいな。
ASCIIに直すようにお願いする位しか解決策が思いつかないが。
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とあんまり関係なくてすみません。
516
(1): 2006/12/27(水)13:04 AAS
初心者的質問で申し訳ありません。
>>391でインストールするとき、最初に
default variantsを選んでください
って言われて、
Multithred Debug, DLL
Multithred, DLL
Multithred
Multithred, static runtime
Multithred, Debug, static runtime
Single thred, static runtime
Single thred, Debug, static runtime
の中から選択させられるんですが、ノーパソ用ペンティアム3(1.13GHz)とノースウッドコアペンティアム4(3.2Ghz)
の場合、どれを選べばいいんでしょうか。
マルチスレッデッィングとシングルスレッディング用CPUの違いくらいしか分からないので・・・
517: 2006/12/27(水)14:35 AAS
Multithred/Single thredはCPUの問題じゃない
518
(1): 2006/12/27(水)14:36 AAS
boostにはデバッグは特にいらないと思う。かなりでかくなるから。
DLLにするかどうかだけど、初心者ならスタティックでいいと思う。
あとはスレッドを利用するならマルチスレッド、しないならシングルスレッド。
シングルスレッドで速度を追求するならシングルスレッドだけど
通常はマルチスレッドでいいと思う。
519: 2006/12/27(水)14:37 AAS
thred?
520: 518 2006/12/27(水)14:37 AAS
訂正
×特に ○別に
521
(1): 516 2006/12/27(水)14:45 AAS
ありがとうございます。
ではとりあえず
Multithred, static runtime
でインストールして使ってみます。
なお、参考までにお聞きしたいのですが、DLLにするとどういった使い方が可能になるのですか?
522: 2006/12/27(水)14:49 AAS
templateなlibraryにDLLもくそもないから気にするな。
523: 2006/12/27(水)15:11 AAS
>>521
DLLの特長はここに書いてある。
外部リンク[html]:e-words.jp
必要ならDLLを選ぶといいと思う。
524
(1): 2006/12/27(水)16:19 AAS
vc2005 sp1の現状

std;;wstring s = L"漢字";
// std::wcout << s << std::endl; //←ここをコメントアウトすると何もでなくなる
std::wcout.imbue(std::locale("japanese")
std::wcout << s << std::endl; //←出る
std::locale::global(std::locale("C"));
std::wcout << s << std::endl; //←出る

よくわかんないけどMSの開発担当者はもっとまともなロケール実装者が来るまで正座な。
525: 2006/12/27(水)16:22 AAS
boostとは直接関係ないけど、これ直ってないのか。なんのためのSPなんだか('A`)
526: 2006/12/27(水)20:10 AAS
>>524
とりあえずSTLport使っとくとlocale::globalの後に
それぞれimbueすればちゃんと動くらしいよ。
付属のだとそれすら効かない。

std::locale loc("japanese");
std::locale::global(loc);
std::wcout.imbue(loc);
std::wcout << L"ぶーすと" << std::endl;
527: 2006/12/27(水)23:15 AAS
ublasでrankは求められなかとですかい?
rank求めるのにlu分解は精度の問題で、一般には使われてないとか書いてるけど、
どの程度精度に問題でてくるんだろうね。
528
(1): 2006/12/28(木)12:41 AAS
外部リンク[html]:www.page.sannet.ne.jpを参考にして
ublasで逆行列を求めようとしているのですが、lu_factorizeの呼び出しでコンパイルエラーになります。
エラーメッセージが大量なので、ソースと一緒にアップローダに上げておきます。
外部リンク[zip]:zetubou.mine.nu
529: 2006/12/28(木)13:06 AAS
実行時エラーなら出るがコンパイルエラーは出ないな。
VC8SP1 + Boostは11月の頭にCVSから

F:\>cl -nologo -EHsc -ID:\Boost inv.cpp
inv.cpp

F:\>inv.exe
Check failed in file D:\Boost\boost/numeric/ublas/triangular.hpp at line 2435:
e1 () (n, n) != value_type ()

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

F:\>
530: 2006/12/28(木)15:50 AAS
November 28, 2006 - Function Types Accepted
531: 2006/12/29(金)19:50 AAS
VC7 でserializationのlib出きへんのやけど
なんか必要?
532: 528 2006/12/29(金)20:29 AAS
boostを1.32.0に入れ替えてみたところコンパイル出来ました。
実行時エラーは、おそらく係数行列を適当に設定したため発生したのだと思います。
係数行列を参考サイトと同じ行列にしたところ、同様の結果が得られました。
ublas使う時だけ1.32.0で行くことにします。ありがとうございました。
1-
あと 469 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.011s