[表示 : 全て 最新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/

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はそうでもないのか、うらやましいのぅ



550 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 02:00:46 ]
VCでCRTのスタティックリンクはもういい加減にやめた方がいいと思うがなぁ。
だいたい何で必要なんだ。
ランタイムのインストーラーの他に、
DLLをEXEと同梱することもライセンス的に認められているというのに。

551 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 11:07:34 ]
>>549
ぜひ最後の
make instal
コマンドlを
checkinstall
に変えて
で同時にできたdebパッケージを配布してほしい

552 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 17:34:47 ]
>>550
DLLの検索に失敗して起動できなかったりすることがあるんだよな
調べるのも面倒だからスタティックリンクする
side-by-sideとか意味わかんね

553 名前:デフォルトの名無しさん mailto:sate [2009/05/11(月) 21:51:08 ]
>>474

亀レスだが
boost-sandbox.cvs.sourceforge.net/viewvc/boost-sandbox/boost-sandbox/boost/numeric/bindings/lapack
を使ってます。
ただ、ublas は LAPACK と要素の格納方法が違うので、
hermitian_matrix とかに対して heev が使えないとか、けっこう不便な所がある。



554 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:07:13 ]
>>549
VCだといつも問題なくライブラリビルドできるね。


555 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:20:51 ]
>>552
そういやそれなんで起こるんだろうな。
対処法があればいいんだが。

556 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 23:30:35 ]
プライベート配置でちゃんとマニフェスト置いておいても失敗するなんて
_BIND_TO_CURRENT_VCLIBS_VERSIONがらみくらいしか知らんがどうなんだろ

そういやbooster.x0.to/さんのビルドDLLは、埋め込みマニフェストのCRTバージョンが
9.0.21022.8になってるから、SP1のmsvcr90.dllを配置すると死ぬかもね

557 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 00:10:17 ]
その心配は要らないはず。
SP1版ランタイムが存在する環境では、バージョンリダイレクトの指定によって、
マニフェストで無印版msvcr90.dllを指定したアプリでも、SP1版ランタイムが読み込まれる。
(たしか無印版CRTをプライベート配置している場合でも)

蛇足だけど、そのことを知ってから自分は
_BIND_TO_CURRENT_VCLIBS_VERSION使うのやめた。

558 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:52:07 ]
戻り値をスマートポインタで返す時に、
scoped_ptrはコピーが禁止されてるから普段はshared_ptrを使ってるんだけど、
コピー禁止+暗黙の型変換でscoped_ptrにできるオブジェクトを作って
それを返してやればいいんじゃね?ってことを思いついた。
今実行できる環境にないからアレだけど……

559 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 13:32:27 ]
>>558
それは auto_ptr の仕事じゃないか?



560 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:39:24 ]
>>559
Pythonのwith文やC#でusingを使うように
ファクトリ関数の戻り値をスコープ管理したい時に、
生のポインタを返してscoped_ptrで包んでもいいんだけど、
忘れたら嫌なのでスマートポインタで返したい、というイメージ。

auto_ptrだとコピー可能だし、所有権がどうのとか考えるのがめんどくさい。
あくまで戻り値を返す瞬間、一回だけコピーできるようにしたい。

561 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 14:43:35 ]
>>560
だからまさにそれauto_ptrだって。

562 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 15:41:56 ]
const auto_ptr=getHogefuga();
みたいなかんじ?んなわけねえか?w

563 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 18:59:19 ]
>>562
558, 560だけど、const auto_ptrが駄目な理由が分かんなくなってきた……
どこに問題があるか教えてくれるとありがたいんだけど

564 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:10:11 ]
const auto_ptrでいいよ。
const auto_ptrはscoped_ptrのようなものだ。少し違うけど。

565 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:20:20 ]
>>563
const じゃ破壊的代入できないだろ?constでないメンバ関数呼べないんだから
そういうこと?

566 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 19:27:32 ]
早くunique_ptrがauto_ptr/scoped_ptrに取ってかわるときが来てほしい。

567 名前:558, 560 mailto:sage [2009/05/12(火) 19:27:43 ]
ん、const auto_ptrを戻り値の型に指定しても右辺値がconstになるだけで
constで受けることを強制できるわけじゃないのか。
受ける時に気をつけるんだったら別にscoped_ptrでもいいし、
なんだかなあって感じだ

568 名前:558, 560 mailto:sage [2009/05/12(火) 19:47:37 ]
と、俺の提案にも穴があることを発見してしまった
暗黙の型変換演算子も一応関数なので、
scoped_ptr型を返す関数を定義してやんなきゃいけないが、
戻り値を返す時にコピーが発生するので無理だ。
ざんねん!! わたしの ぼうけんは これで おわってしまった!!

C++0xのunique_ptrとかは右辺値参照とか使ってこれを回避してるのかな?

569 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 20:25:21 ]
scoped_ptrにauto_ptrで初期化するコンストラクタがあるから、auto_ptrで返してscoped_ptrで受け取ればいいんじゃね?
なぜかドキュメントに載ってないが



570 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 04:17:00 ]
>>569
559 の時点でゴールが示されてるのに、なぜかたどり着けない 558 が哀れだ。

571 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 08:32:52 ]
>>568
C++03 の unique_ptr 実装はなかなかうまい方法で右辺値から(のみ)の初期化を実現してる。
それを真似することで、所有権移動禁止だが右辺値初期化だけ可能な scoped_ptr を
作ることはできる…が、それはもはや scoped じゃないという気も






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

前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