[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 03/13 15:15 / Filesize : 207 KB / Number-of Response : 692
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Boost総合スレ part7



1 名前:デフォルトの名無しさん [2009/01/19(月) 21:22:22 ]
過去スレ
part 6 pc11.2ch.net/test/read.cgi/tech/1207749841/
part 5 pc11.2ch.net/test/read.cgi/tech/1192662575/
part 4 pc11.2ch.net/test/read.cgi/tech/1175663346/
part 3 pc11.2ch.net/test/read.cgi/tech/1158991211/
part 2 pc8.2ch.net/test/read.cgi/tech/1139313234/
part 1 pc8.2ch.net/test/read.cgi/tech/1091198276/

■関連サイト■
Boost C++ Libraries
www.boost.org/

Boost 翻訳プロジェクト
boost.cppll.jp/HEAD/

Let's Boost
www.kmonos.net/alang/boost/

boost info
shinh.skr.jp/boost/

449 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 03:36:54 ]
コンパイラさえ動けば問題ないだろ。

450 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:43:09 ]
今までhoge.cppファイルの中でboost::bindを使っていたのだけれど、
今度そのhoge.cppにboost::lambdaも使うことにしようと思っている。
なお、このhoge.cpp以外でboost::bindおよびboost::lambdaは使用していない。
このような時は
1.boost::lambdaをただ追加する
(=<boost/bind.hpp>と<boost/lambda/lambda.hpp>をインクルードする。)
2.boost::bindを使っている箇所も全てboost::lambdaに置き換える
(=<boost/lambda/lambda.hpp>だけインクルードする。)
このどちらが良いのかい?


451 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 16:59:24 ]
boost::bindはグローバルに_1とか置く割と行儀が悪いライブラリだったりするんで俺なら2を選ぶ

452 名前:450 mailto:sage [2009/04/27(月) 17:05:52 ]
>>451
> boost::bindはグローバルに_1とか置く割と行儀が悪いライブラリだったりするんで俺なら2を選ぶ
そうだったんか。
そういえばboost:lambdaの_1とかとバッティングすることがあると聞いた気がするなぁ。
まあbindは古株だからかな?

453 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 17:46:19 ]
bindのところをlambdaにしたらそれだけでファイルサイズが60kbくらいあがったわ。
・・・でもPC向けだしこのくらいいいかな、利便性を考えれば。

454 名前:デフォルトの名無しさん [2009/04/27(月) 23:09:28 ]
初心者ですがお願いします.以下のようなエラーが出て困っています。
boostのbind.hでerror C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません
c:\includefiles\boost\bind.hppと出ます。
いかがその部分です

template<class F> struct result_traits<unspecified, F>
{
typedef typename F::result_type type;
};


色々サイトで調べてみたのですが、#include <boost/bind.h>の前に
#define BOOST_BIND_ENABLE_STDCALL
#define BOOST_MEM_FN_ENABLE_STDCALLを書くと良いと記載されていたのですが、
エラーが取れません。原因がわかりませんでしょうか?


455 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 23:27:35 ]
>>454
result_traitsの後に<は書けなくね?

456 名前:デフォルトの名無しさん [2009/04/27(月) 23:50:15 ]
>>455さん
ご返事ありがとうございます。

エラーの箇所を確認したのですが、bind.hの中からエラーを出力しているようです。
boostの中のバグということでしょうか?

457 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:10:18 ]
>>456

エラーの発生する自分で書いた側のコードをupして。




458 名前:デフォルトの名無しさん [2009/04/28(火) 00:38:20 ]
>>457さん

確認したのですが bind.hppのエラーしか出力されていないようです。
ちなみにエラー箇所はbind.hppの68行目で

template<class F> struct result_traits<unspecified, F>
{
typedef typename F::result_type type;
};
から出力されておりエラー内容は
error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません c:\includefiles\boost\bind.hpp
error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp
error C2146: 構文エラー : ';' が、識別子 'type' の前に必要です。c:\includefiles\boost\bind.hpp
error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp
error C1903: 直前のエラーを修復できません。コンパイルを中止します。c:\includefiles\boost\bind.hpp
error C2039: 'result_type' : '`global namespace'' のメンバではありません。c:\includefiles\boost\bind.hpp
error C2208: 'boost::_bi::type' : メンバのない列挙型、構造体、共用体が定義されました。c:\includefiles\boost\bind.hpp
と記述されています。お手数ですがアドバイスお願いいたします。



459 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:57:36 ]
>>458
boost::bind()を呼ぶところの第3引数が間違っている可能性が高い。
だから>>457

460 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 00:59:54 ]
>>459
第3は余計だった。なんでこんなこと書いたんだ
とにかく引数の指定を間違えてる

461 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 01:38:35 ]
>>458
最近のVisual C++なら、
「foo.cpp(7) : コンパイルされたクラスの テンプレート のインスタンス化 'HogeHoge' の参照を確認してください」
ってのがエラーメッセージの随所に挟まっている。
(IDEからビルドしているなら、エラー一覧ではなく出力ウィンドウのほうに)
このメッセージだけを見ていくと、その中に必ず自分のソースコードを指しているものがあるはず。

462 名前:デフォルトの名無しさん [2009/04/28(火) 02:01:59 ]
>>459,460,461
返事が遅くなってしまい申し訳ございませんでした。
ご親切なご回答ありがとうございます。

自分のソースを確認した所、
1>c:\includefiles\boost\bind.hpp(67) : error C2825: 'F': '::' が後に続くときは、クラスまたは名前空間でなければなりません
1> c:\includefiles\boost\bind\bind_template.hpp(15) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::result_traits<R,F>' の参照を確認してください
1> with
1> [
1> R=boost::_bi::unspecified,
1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw()
1> ]
1> c:\work_data\gg\src\network\servent.cpp(54) : コンパイルされたクラスの テンプレート のインスタンス化 'boost::_bi::bind_t<R,F,L>' の参照を確認してください
1> with
1> [
1> R=boost::_bi::unspecified,
1> F=void (__thiscall Servent::* )(const boost::system::error_code &,size_t) throw(),
1> L=boost::_bi::list3<boost::_bi::value<Servent *>,boost::arg<1>,boost::arg<2>>
1> ]


463 名前:デフォルトの名無しさん [2009/04/28(火) 02:13:39 ]
すみません、誤って書き込んでしまいました。上記のエラーメッセージが出力されています。
ソースとしては、
typedef typename result_traits<R, F>::type result_type;
boost::bind(&Servent::read, this,boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));

あと質問なのですが、boostのバージョンによる不具合の可能性はあるのでしょうか?
現在boostの1.35を使用して実行しております。

度々ご質問して申し訳ございません。


464 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 06:06:36 ]
>>454
> 初心者ですが
これいらない

465 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 14:21:59 ]
ついにboostもcmakeか


466 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 14:50:26 ]
>>463
コンパイルしてそのエラーの出る最低限のソースが必要。


467 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 01:27:44 ]
VC++のバージョンは?
7.0以下だと該当コードは利用できず、別のコードに置換されるみたいだけど。



468 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 11:13:14 ]
enable_ifの引数にboost::mplもつかえるんだね。boostってスゲエと思った。


469 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 19:11:05 ]
>>468
ホントすげぇよBoost。
C++が大好きなんだろうなぁと思わせられるよね(笑)
Boost.Lambda(functionも。)やBoost.Spirit、Boost.MPLあたりが変態級の名を冠するにふさわしいか。
利便性で言えばshared_ptrもヤヴァイけど。

470 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 22:49:38 ]
preprocessorを忘れるとはけしからんな。

471 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 23:11:00 ]
C++ code - 32 lines - codepad
codepad.org/6fhFzzye
このコードにて、エラーになる原因が分かりません。
私の考えでは
boost::lambda::bind(func_i, boost::lambda::protect(boost::lambda::bind(my_name, boost::lambda::_1)))
でconst char* constを受け取りintを返す関数が得られるので、
それをlambda_test_funcの引数として渡せるのではないかと思ったのですが。
どこを修正すればよろしいでしょうか?


472 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 23:17:13 ]
>>471
lambda で生成される関数は、関数オブジェクトの一種。
関数へのポインタは C++ 言語上の「関数」を指すことができるけど、
言語上はクラスオブジェクトとなる関数オブジェクトを指すことはできない。

関数と関数オブジェクトを同等に扱うためのものとして boost::function がある。

- void lambda_test_func(int (*func_ptr)(const char* const char_ptr))
+ void lambda_test_func(boost::function<int (const char*)> f)

473 名前:472 mailto:sage [2009/04/30(木) 23:38:58 ]
>>471
あと、関数合成に boost::lambda::protect 要らない。
www.boost.org/doc/html/lambda/le_in_details.html#id3704796

474 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 02:59:05 ]
UBLas使ってる人に聞きたいんだけど、固有値分解とかはどうやってるの?
検索するとCLapack使ってるのしかでないけど、みんな自前で書いてるの?

475 名前:471 mailto:sage [2009/05/01(金) 05:58:59 ]
>>472
ありがとうございます。
学べました!

476 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 19:03:13 ]
更新しました。今週はSpiritに大きな変化がありました。
ttp://booster.x0.to/
以下更新内容の一部
[Mpl]
portability patch for sunpro on little-endian platforms
[Regex]
Added support for \g \K and \R.
[Spirit]
Merging Spirit V2.1
Spirit: Added missing files, deleted old files, cleaned up empty directories
Spirit: Started to add repository of reusable Spirit components, added
repository::karma::confix and some related tests
Spirit: Fixed assertion in multi_pass iterator
[Statechart]
Updated VC project files to 1.39.
Fixed a bug that prevented the use of boost::ref()
with fifo_scheduler<>::create_processor<>, reported by Steve Hawkes.
This should fix the non-standard code used in changeset 52616.
[Signals2]
Trying to fix compile problems on msvc 9 in release mode.
[Serialization]
Correct logic for enabling THROW_EXCEPTION
Add support for std::bitset.hpp


477 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 19:10:05 ]
>>476
ほほうspiritがV2になったのか




478 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 01:00:05 ]
>96 の問題は直ったんだろうか

479 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 22:45:06 ]
>>476
Signals2って何かな?と思って調べたらスレッドセーフのSignalらしい。これは欲しい。


480 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 12:01:48 ]
1.39きたぁぁぁ

481 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:32:00 ]
>>480
Boostって結構こまめに更新した方が良いの?
俺のBoostは1.37なんだけど。。。

482 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 13:50:15 ]
>>481
最近一定期間ごとにリリースする方針に変えたらしいね。
更新内容を見て、興味のない更新ばかりだったら放置しても可だと思うけど。

特に最近は後方互換性を平気で破壊するような更新が多いから悩む。
exceptionとかexceptionとかexceptionとか。

483 名前:481 mailto:sage [2009/05/03(日) 13:57:14 ]
>>482
ありがとう。exceptionって使ったこと無いなぁ。便利?

その仕様変更はBoostだから出来ることか。
まあC++に正式に乗っちゃったら迂闊に仕様変更できないから
今のうちに満足行くまで更新して欲しい。

484 名前:481 mailto:sage [2009/05/03(日) 14:01:33 ]
>>482
ホントだ、1.36以降、3ヶ月刻みになっているね。
Version 1.39.0
May 2nd, 2009 12:00 GMT
Version 1.38.0
February 8th, 2009 12:00 GMT
Version 1.37.0
November 3rd, 2008 12:00 GMT
Version 1.36.0
August 14th, 2008 12:00 GMT
Version 1.35.0
March 29th, 2008 12:00 GMT


485 名前:471 mailto:sage [2009/05/03(日) 14:36:17 ]
>>472-473
ご教示の通り
boost::lambda::protectを外した上で boost::function を利用したところ、
問題無くコンパイル通りました。
ありがとうございました。

486 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 17:29:29 ]
>>481
必要に応じてあげていけばいいと思うよ。
でもバージョン上げたら、コンパイルできなくなったりすることがあるから一気にバージョン上げるとつらいかも。


487 名前:471 mailto:sage [2009/05/03(日) 17:55:45 ]
普通の部分では以前ご教示いただけた通りで動きました。
今度はBoost.Spiritのセマンティックアクションにラムダ式を入れる時にまた困っております。

//以下はMyClass.hの中身
class MyClass
{
MyClass();
virtual ~MyClass()=0;
public:
static const int get_10(const char * const);
};
//以下はMyClass.cppの中身
#include "MyClass.h"
const int MyClass::get_10(const char * const)
{return 10;}
//mainは以下です。
C++ code - 112 lines - codepad
codepad.org/K35wYWBz

このソース中の質問箇所というコメントのところ
('/' >> fctr)[
boost::lambda::bind(func_geti_reti,
boost::lambda::bind(MyClass::get_10, boost::lambda::_1)
)
]
が問題点なのですが、



488 名前:471 mailto:sage [2009/05/03(日) 17:58:47 ]
前述のように
@Boost.Spiritのセマンティックアクションに
Aラムダのbindで関数を結合し
BMyClass::get_10の部分ががクラスのstaticメンバ関数である
この@〜Bの時に
x_error.cpp:82: error: invalid initialization of non-const reference of type 'co
nst int (&)(const char*)' from a temporary of type 'const int ()(const char*)'
C:/BoostC++Libraries/boost/lambda/detail/bind_functions.hpp:256: error: in passi
ng argument 1 of `const boost::lambda::lambda_functor<boost::lambda::lambda_func
tor_base<boost::lambda::action<2, boost::lambda::function_action<2, boost::lambd
a::detail::unspecified> >, typename boost::lambda::detail::bind_tuple_mapper<typ
ename boost::lambda::detail::constify_non_funcs<T>::type, const Arg2, boost::tup
les::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuple
s::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples:
:null_type, boost::tuples::null_type>::type> > boost::lambda::bind(const Arg1&,
const Arg2&) [with Arg1 = const int ()(const char*), Arg2 = boost::lambda::place
holder1_type]'
というエラーが出てしまいます。
環境はg++です。

489 名前:471 mailto:sage [2009/05/03(日) 18:03:35 ]
先のソースは
× MyClass::get_10(const char * const)
○ MyClass::get_10(const char * const, const char * const)
× boost::lambda::bind(MyClass::get_10, boost::lambda::_1)
○ boost::lambda::bind(MyClass::get_10, boost::lambda::_1, boost::lambda::_2)
とすべきでした。失礼致しました。
それでもなお
x_error.cpp:81: error: invalid initialization of non-const reference of type 'co
nst int (&)(const char*, const char*)' from a temporary of type 'const int ()(co
nst char*, const char*)'
というエラーが出てしまいます。
非constな参照でテンポラリな何物かを捉えているという旨のようですが、
どうすれば回避できるのか分かりません。
どうかお知恵をお貸しください。


490 名前:471 mailto:sage [2009/05/03(日) 18:31:34 ]
boost::lambda::bind
をboost::bindに書き換えたら問題無く動作しました。
個人的にはboost::bindライブラリとboost::lambdaライブラリを混在させるのは気持ち悪いので
出来ればboost::bindの箇所は無くして全てboost::lambda::bindにしたいのですが、
どうすれば良いでしょうか?

491 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 20:36:47 ]
3行でまとめてくれ

492 名前:471 mailto:sage [2009/05/03(日) 21:01:43 ]
>>491
SpiritのSemantic Actionにlambda::bindで関数を結合して渡すとエラーになりますが、boost::bindならOKです。lambda::bindでも大丈夫にする方法を教えていただけないでしょうか?

493 名前:デフォルトの名無しさん mailto:sage [2009/05/03(日) 21:17:04 ]
恐縮ですwww
func_geti_retiの引数の&が余分じゃないか?


494 名前:471 mailto:sage [2009/05/03(日) 21:36:52 ]
>>493
int func_geti_reti(const int& num)

int func_geti_reti(const int num)

int func_geti_reti(int num)
にしてみましたが、
error: invalid initialization of non-const reference of type 'const int (&)(const char*)' from a temporary of type 'const int ()(const char*)'
と言われます。
私の見解では
関数の戻り値などのテンポラリオブジェクト(この場合はint)を
constな参照で束縛できるというC++の仕様がありますから、
このあたりが問題な訳ではなさそうだと思っております。


495 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 20:23:45 ]
letsboost::operators
ttp://www.kmonos.net/alang/boost/classes/operators.html
ここで紹介されているoperatorsって、いちいち定義が面倒なのを自動化してくれるらしいから
便利そうだと思っているんだが、使うと遅くなったりするのかい?

496 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 23:18:04 ]
しない。
ただし、クラス/構造体のサイズを余計に増やしたくなければ、ちょっとだけ特殊な記法が必要。

497 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 23:52:23 ]
>>496
ほう、そうなんか。そのちょっとだけ特殊な記法とはEBOに関連する?



498 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:17:24 ]
en.wikipedia.org/wiki/EBO

499 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:21:31 ]
>>498
EBOはEmpty Base Optimizationのつもりで書いた。
みんなに通じる略称かと思っていたが甘かったかな。

500 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 00:33:29 ]
意味は判るがその略称は初めて見たぞ。
ちなみにその直感は超正しい。 俺はDirect3Dを使ったソフトでベクトル型をboost::operatorから継承したせいで
半日謎のバグと戦う羽目になった。

501 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 01:05:17 ]
OpenGLで同様な目にあった俺参上。

502 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 08:58:41 ]
ふーん、なんかややこしいような気がしてきてしまった。
何はともあれ皆さんありがとう。

503 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 11:29:54 ]
Effective C++の最新日本語訳本を読んだところ、
p202にEBOがEmpty Base Optimizationの略称で使われているのを発見した。
原著ではどうなっているのかな?

504 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:29:05 ]
EBO とか ADL, CRTP, SFINAE, RAII あたりは普通に使ってる

505 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:42:43 ]
あとはRVO、NRVOかな

506 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 12:47:20 ]
RAIIぐらいはいいが、
あんまりにも乱発するのは感心しないぞ。

507 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:11:24 ]
TSKに、RNPTはKNSNしないな



508 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:14:46 ]
>>506
ADLやSFINAEはバグの原因になるから
勝手に使えるようになる。

CRTPやEBOはどうなんだろ。
趣味でやってると手を出したくなるけど。

509 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 13:41:36 ]
>508
いや、略語乱発は感心しないという話では?

510 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 14:48:23 ]
だれがどう感心しないんだw

つうかそこいらの女子高生の略語に比べればカワイイもんだ

511 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 18:38:34 ]
1.39落としたけど、
./booststrap.sh してできた project-config.jam の
option.set libdir の行が PREFIX/lib じゃなくて /lib になるのは
何かやんごとなき事情でもあるの?

512 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:06:59 ]
1.39.0、またビルドの方法変わった?
1.38.0の時にやってた、

bjam --toolset=msvc-8.0 -sBZIP2_SOURCE=〜 -sZLIB_SOURCE=〜 --stagedir=. stage release debug link=static,shared runtime-link=static,shared

でビルドしようとすると何か途中で止まるんだが…

513 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:22:31 ]
VC8なら、runtime-link=staticは使わないだろ。外した方が良い。
あとシングルスレッドライブラリも使わないから、threading=multiも指定した方が良いな。

514 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:26:39 ]
>>513
d
おかげでビルド進みました。

515 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 11:36:46 ]
まあ、それとビルドが進まないのとは別問題なんだけどな。
なんかmathがビルドできないな。
しかも、なぜか自分でファイルを消しておいて、そのファイルが見つからないからskipとかいうヘンなメッセージが。
もう一度試したらうまくいっているようだが。

516 名前:デフォルトの名無しさん [2009/05/07(木) 12:30:11 ]
>>515
link=staticとruntime-link=staticがどうたらこうたらっていうエラーメッセージが出て止まってた。
やっぱりバッチファイル直接実行じゃなくてコマンドプロンプトから実行しないとダメだな…

517 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 20:35:09 ]
1.39でてたのか
チェックしてくる



518 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 21:19:56 ]
>>517
1.37->1.39にした俺はspiritの名前空間が変わってて驚いた。


519 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 22:52:30 ]
1.39のリリースノートによるとメモリリーク対策で導入すべきなのだが
再ビルドに時間がかかり面倒なので見なかったことにした

520 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:31:10 ]
マルチコアなCPUを使うのは、今時のBoost使いなら当たり前。

521 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:40:39 ]
ビルドが必要なライブラリって、なんかどうしても使う気になれないんだよねぇ。。。
みんな積極的に使ってる?

522 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 23:46:32 ]
>>521
必要なら使う、当たり前のこと。

523 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 01:13:49 ]
使うにしてもregexとfilesystemとserializationくらいだなぁ

524 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 01:59:58 ]
program_opt……いや、なんでもないんだ

525 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 07:46:02 ]
>>524
もうちょっとシンプルなら使うのに…

526 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 09:16:23 ]
あれはシンプルとかそれ以前に問題が多すぎる。
boost初期からあるってだけで、今新規に投稿しようとしたら満場一致で拒否られるレベル。

527 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 09:29:49 ]
program_optionを普通に使ってて便利だと思ってる俺がおかしいのか。



528 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 11:37:47 ]
あれunicodeのサポートが最悪だよ。

529 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 21:48:14 ]
>>518
1.38でビルド時に警告が出てた。


530 名前:518 mailto:sage [2009/05/08(金) 22:40:53 ]
>>529
結局ソースを見てたどっていって正しい名前空間を見つけたから大丈夫だったがね。


531 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:36:58 ]
上のほうの書き込み見て思ったが、1.39.0ではVS2005のランタイムライブラリに
マルチスレッドデバッグ(/MTdオプション)やマルチスレッド(/MTオプション)を
指定している場合用のライブラリのビルドできなくなってるのかな?

532 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 09:55:48 ]
そもそもMS自身が、もはやスタティックリンク版のCRTライブラリの使用を推奨してない。

533 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 11:30:32 ]
ttp://booster.x0.to/
確かにビルドの挙動が変わっていますね・・・。
少なくとも3週間以上、sharedライブラリがビルドされていない事に気付かないままアップロードしていましたので全て取り下げました。
申し訳ございません。
ところでお詫び代わりという訳でもありませんが、Windows+VC環境では導入が面倒なライブラリ群(bzip2,Expat,ICU,zlib 32/64bit)の
ビルド済みパッケージを用意しました。(libs_for_build_boost.rar)
残りのMPICH2とPythonのインストーラを公式からダウンロードしてインストールすれば、32/64bitBoostのフルビルドが簡単に行える様になります。
それから、build.txtを改訂序にhow_to_build.txtに名称変更しました。

そういえば今週のsvnスナップショットは今夜辺りにでもビルドしてアップロードする予定ですが、64bit版svnスナップショットの需要はありますでしょうか。
32bit版と同梱にすると圧縮しても250MB程度まで膨れ上がる可能性がありますし、
ファイルを分けるにしてもサイト容量と作業時間を食いますので需要が無ければ今迄通り32bit版のみにします。
若しくは、1.39等のリリース版ソースを使った64bitビルドが欲しいといったリクエストでも構いません。こちらも一時の手間で済みますので楽です。

>>531
staticもsharedも、特に今迄と変わり無くビルド可能です。

534 名前:デフォルトの名無しさん [2009/05/09(土) 11:38:33 ]
Signals と Signals2 との違いって、マルチスレッド対応だけ?
シングルスレッドなプログラムなら、かえって Signals のままのほうが
排他制御なくて性能いいとかあるんかな。

535 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 12:38:51 ]
>>534
ライブラリビルド不要とも書いてあったな。

536 名前:デフォルトの名無しさん mailto:sage [2009/05/09(土) 15:34:23 ]
>>534
dummy_mutexなんてもんもあるでな。

537 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:46:30 ]
↓ 更新しました。link=shared runtime-link=sharedでmpiとzlib絡みのエラーが発生して
計12ファイルが欠損しておりますが追々改善していきます。毎度人柱仕様で申し訳ございません。
ttp://booster.x0.to/
以下更新内容の一部
[Spirit]
Spirit.Support: Renamed policy namespace for iterators
Spirit: fixed member initialization sequence
Spirit: added some parenthesis' avoiding macro expansion of certain names
[Archive]
fix for error in handling compilers which don't handle has_new_operator
[Config]
Add __GXX_EXPERIMENTAL_CXX0X__
[Units]
Allow specifing the default conversion using either base units or units.
[wave]
Update Wave to cope with some namespace reshuffling in Spirit
Wave: Pending fix after namespace change in Spirit2 iterators
[Type_traits]
new test of empty aligned_storage
[mpi]
Fixes for bugs 2586 and 2594

[Regex]
Add support for named sub-expressions.
[Utility]
eliminate noisy warning on msvc, fixes #2993

それと>>531の件ですが、確かにmt-s,mt-sgdがビルド出来なくなっていました。
ただ、bjamのオプションを弄ったりすると一部ビルドが出来たり
ビルドログを取ってみるとエラーメッセージがおかしかったりとbjamの挙動が良く分かりませんのでこちらも検証していきます。



538 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 01:32:26 ]
まだ軽くしか調べていませんが、どうもbjamか設定ファイルがバグっているみたいですね。
--build-type=completeやlink=static runtime-link=staticとすると何故か
error: link=shared together with runtime-link=static is not allowed
error: such property combination is either impossible
error: or too dangerious to be of any use
と表示されますが、--build-type=complete --with-mpiやlink=static runtime-link=static --with-mpi(--with-pythonでも可)とすると
ビルドが通ります(但しmpiやpython関連ライブラリのみですが)。

539 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 07:39:46 ]
そのエラーは正しいとしか思えない。
というのも、例えばVCの場合、CRTのライブラリには、いくつものバージョンがある。
それこそ、SPごとにバージョンが変わる。
CRTをスタティックリンクするが、Boostをダイナミックリンクするということは、
CRTのバージョンが異なる可能性があり、危険だと思う。

そしてそもそもCRTのスタティックリンク自体が、VCでは推奨されていない。
確か、Boostの連中の検証した所によると、スタティックリンクのCRTを使うと、
スレッド周りで、たとえ正しいコードを書いたとしても、メモリリークする場合があるらしいとかいうMLを、
どっかで見た気がする。

540 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:14:22 ]
私もエラーメッセージの意味するところ自体は正しいと思いますし、link=shared runtime-link=staticは
1.38以前からビルドは不可能でした。ただ、1.39のbjamビルドでは
link=shared runtime-link=staticではなく
link=static runtime-link=staticや--build-type=completeでも
error: link=shared together with runtime-link=static is not allowed
と表示されてしまい、
link=static runtime-link=static --with-python(or mpi)としたり
--build-type=complete --with-python(or mpi)とすると
ビルドが通ってしまう点がよく分かりません。
1.38と1.39のdebugビルド時のbjamの動作の違いは
Boost 1.38
static static: libboost_...-vc90-mt-sgd-1_38.lib
static shared: libboost_...-vc90-mt-gd-1_38.lib
shared static: error: link=shared together with runtime-link=static is not allowed
shared shared: boost_...-vc90-mt-gd-1_38.lib + boost_...-vc90-mt-gd-1_38.dll

(続く)

541 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 13:15:30 ]
(続き)
Boost 1.39
static static: error: link=shared together with runtime-link=static is not allowed
(--with-python(or mpi)時のみlibboost_...-vc90-mt-sgd-1_39.lib)
static shared: libboost_...-vc90-mt-gd-1_39.lib
shared static: error: link=shared together with runtime-link=static is not allowed
shared shared: boost_...-vc90-mt-gd-1_39.lib + boost_...-vc90-mt-gd-1_39.dll
です。そのCRTスタティックリンク非推奨の件でstatic staticが封印されたのかとも思いましたが、
CMakeでVC用のプロジェクトファイルを作成してビルドするとmt-s(release static static)やmt-sgd(debug static static)が作成されましたので、
--build-type=completeがエラー扱いになってしまう事と併せるとbjam(の設定ファイル)の不具合ではないかと考えています。

上記とはあまり関係ありませんが、libs_for_build_boost.rarをアップデートしました。ttp://booster.x0.to/
zlibに似た何かをzlibと勘違いしてビルドしてしまっておりましたので正しい物に差し替えました。申し訳ございません。
これで、ビルド不可能なBoostライブラリはboost_graph_parallelのlibとdllのみ(mpi絡みのエラー)となります。
boost_graph_parallelはログを見ると32bit版がリンクエラーなのに対して
64bit版ではコンパイルエラーで引っ掛かっているのでソースが怪しい気がしなくもないですが・・・。
只、readmeやhow_to_build.txt内のbjamビルドコマンドについては上記の件もあり私自身混乱気味ですので、参考程度にして下さい。

542 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 15:31:21 ]
regex
date_time
program_option
serialization
thread
filesystem
(system)

要ビルドのライブラリで使うのはこれぐらいかなぁー

543 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 16:53:36 ]
>>542
十分つかってるな。

544 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 17:14:49 ]
むしろ使ってないのを挙げた方が早いなw

545 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:07:22 ]
static-staticビルド不可の原因が半分掴めました。対症療法的なビルドは可能になりました。
svn rev.52330(April 11,2009)での\Jamrootの更新で、160行目周辺の
if <link>shared in $(properties) && <runtime-link>static in $(properties) &&
! ( <toolset>cw in $(properties) )
{
return <build>no ;
}

if <link>shared in $(properties) && <runtime-link>static in $(properties) &&
! ( <toolset>cw in $(properties) )
{
ECHO "error: link=static together with runtime=link is not allowed" ;
ECHO "error: such property combination is either impossible " ;
ECHO "error: or too dangerious to be of any use" ;
EXIT ;
}
に変更されています。EXIT ;をreturn <build>no ;にすれば旧来通りの動作(上記エラーメッセージが2度表示されますが)になりstatic-staticがビルドされます。

546 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 18:08:02 ]
但し、RegexのICUサポートを有効にしている場合は
Skipping build of: libs/regex/build/icucore <build>no in common properties ...
と表示され、ビルドされたlibboost_regex-vc90-mt-sgd.libは
EXIT ;をreturn ;(唯戻るだけ)にして上記Skippingメッセージが表示されない状態でビルドした同libとファイルサイズもMD5も一致しません。
ログ(return <build>no ;:ttp://booster.x0.to/test86bak.txt return ;:ttp://booster.x0.to/test86.txt)を見ると
作業フォルダこそ違え同じ様な動作をしている様に見えるのですが、return ;でビルドした方が僅かにファイルサイズが大きくなります。
しかしそもそもstatic-staticでは実行されない筈のルーチンが実行されたり
エラーメッセージが2度表示されしまっている(エラー処理ルーチンを2度通っている)時点で何かがおかしいのですが、
今迄エラーメッセージを発せずICU絡みでしか実害が無い(と思われる)仕様でしたので問題が隠蔽されていた様です。
bjamとJamrootをそれぞれrev.38329(August 1,2007)とrev.38534(August 9,2007)迄戻してもstatic-staticがこのルーチンに引っ掛かっていましたので、
相当昔からのバグの様です。おかしいのは設定ファイルではなく恐らくbjamのソースの方でしょうか。
EXIT ;をreturn ;にしてエラーを完全に無かった事にしてしまうのが対症療法としては現状での最善と思われますが、
この場合、禁止されているshared-staticでも52回エラーメッセージを繰り返した後ビルドを始めてしまいますのでご注意下さい。

547 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:18:43 ]
回避方法乙。
早速使わせてもらいます。
ゲームの場合はstatic-staticじゃないとサポート面倒なんで…



548 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 23:24:58 ]
Bおおst、buildすら困難になって来たのか

549 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 00:13:20 ]
俺BoostをLinuxで使うよ君だけど
そのままBuid出来た事なんて一度もないよ
いつもJamファイルと格闘する羽目になる
Windowsはそうでもないのか、うらやましいのぅ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<207KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef