Boost総合スレ part10
文字化けなおしたのが、githubにコピーされてるよ。 ttp://www.freeml.com/cppll/14009 ttp://boostjp.github.io/archive/boost_docs.html Windows8でVisual studio 2012にBoost1.57.0をビルドしようとしているのですが、失敗して困っています。 ネット上にあるboostのインストールのやり方を参考に、 bootstrap b2 toolset=msvc-11.0 --build-type=complete stage とビルドしたのですが、 ...failed updating 411 target... ...skipped 556 targets... ...updated 4241 targets... と出ます。エラーメッセージが大量に出るのですが、一部を見ると、 一番最初に link.jam no such file or directory というエラー出たり、 call "C:\Program Files (x86)\microsoft visual studio 11.0\vc\vcvarsall.bat x86>nul や ...failed msvc.archive bin.v2\libs\wave\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_wave-vc110-mt-s-1_57.lib ...skipped <pstage\lib> libboost_wave-vc110-mt-s-1_57.lib for lack of <pbin.v2\libs\wave\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi> libboost_wave-vc-110-mt-s-1_57.lib のように出ています。 ↓続く sage忘れすみません 実はこのエラーに対面する前、bootstrapを実行するときに 'cl'は内部コマンドまたは外部コマンド操作可能なプログラムまたはバッチファイルとして認識されていません というエラーが出まして、それを解決するために http://blog.remu.biz/2011/04/vs2010boost.html このサイトを参考にC:\Program Files(x86)\Microsoft Visual Studio 11.0\VC\bin\vcvars32.batに @SET VSINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0 @SET VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC @SET FrameworkDir32=C:\Windows\Microsoft.NET\Framework @SET FrameworkVersion32=v4.0.30319 @SET Framework35Version=v3.5 の追加と ::@call :GetVSCommonToolsDir ::@if "%VS110COMNTOOLS%"=="" goto error_no_VS110COMNTOOLSDIR ::@call "%VS110COMNTOOLS%VCVarsQueryRegistry.bat" 32bit No64bit のコメントアウトの編集をしました。 もしかしたらそれが原因なのでしょうか?しかし元に戻してビルドを行ってみたのですがやはりビルドはできませんでした。 3日ほど悩んで答えが出なかったので皆さんの力を借りさせてください。お願いします。 >>235 です。 すみません。初心者なものでjamというものが何を指しているのかわかりません。 bjam.exeならbootstrapの時にb2.exeと一緒に生成されています。 ぐぐるとboost-jamというものも見つかったのですが、これは古いバージョンのインストールに使うもの?のようでした。 >>236 スタートメニューにあるVS2012 x86 Native Tools コマンド プロンプトから b2を呼んでるか? >>239 VS2012開発者コマンドプロンプトから呼んでました。 改めてVS2012 x86 Native Tools コマンド プロンプトでビルドしてみたのですが、failed updatingと言われ、ビルドできませんでした。 >>235 です。 どこでエラーメッセージが区切られているのかわからなかったため、読み飛ばしてしまってました。これが全文のはずです。 if exist "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" DEL "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" C:\Users\ユーザー名\AppData\Local\Temp\b2_msvc_11.0_vcvarsall_x86.cmd link /lib /NOLOGO /out:"bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib" @"bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib.rsp" ...failed msvc.archive bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib ...skipped <pstage\lib> libboost_random-vc110-mt-s-1_57.lib for lack of <pbin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi> libboost_random-vc-110-mt-s-1_57.lib DEL "bin.v2\libs\random\build\msvc-11.0\release\link-static\runtime-link-static\threading-multi\libboost_random-vc110-mt-s-1_57.lib"は確かにありました。 しかし、生成された日時を見るとこれはb2を実行した時に生成されたもののようです。 これはどうすればいいのでしょうか? Visual Studioでboostを使う自作の Static.lib プロジェクト を作って、そのライブラリを使う自作の Console.exe プロジェクト でリンクして使う場合、Console.exeのプロジェクトの設定で リンカー 追加のライブラリディレクトリ: C:\.....\stage\Win32\lib とすればリンク出来て無事に実行できました。 このリンカーの設定は、Static.libを使うプロジェクトを作ると(今の場合Console.exe)、必ずしておく必要がありますか? できればStatic.lib側のほうの設定でboostのリンクもできるなら、Console.exe側でやる手間が省けるのですが。 boostのGILって標準ではBMPファイル読み込めないの? ぐぐって出て来たnew ioってのはまだboost申請中?みたいだけど、これ使っておけばいいのかな? io_newでBMP読めたけど、色深度が読込むファイルと合ってないと例外発生するよ >>244 結構面倒くさい仕様だな… 勝手にフォーマット変更とかしてくれると便利だけどさすがに贅沢か… boost.computeって正式に採用される予定あるの? boost.pythonってstatic linkしてもpythonxx.dllは必要?教えてエロいひと。 Win7 64bitで python3.4 32bit版インストール link=static runtime-link=static address-model=32でboost.pythonビルド includeパスとlibパスを指定して、MTにして #define BOOST_PYTHON_STATIC_LIB #include <boost/python.hpp> で32bitアプリケーションをビルド pythonインストールしてないPCだと、python34.dll missingになる うーん。何か足りないものありますか? boostの名前をつけるルールを 行列計算の時だけ破って 行列を大文字のAとかXにしてるの良くみるのですが 行列だけは例外的にルール破っていいことになってるのでしょうか 大文字はテンプレート変数ですよね? boostってちょっとはC++ができる人が作ってるライブラリですよね? ビルド時になんであんなに警告がでるんですか? もしかして素人さん? コンパイル時間はどうでもいいです。 コンパイルなんて休憩時間くらいしかやらないから・・・ コンパイル時間のことでないとすると どのライブラリが何と比べてどれくらい遅いのかを書かないと 一時は随分持て囃されたようだが コレもすっかりネタライブラリと化したなw ネタかどうかはともかく、PCのアプリ開発がビジネス的においしくないから 国内ではもっぱらプログラム廃人(w)の道具でしかない コンパイルがだるいのであまり使いたくないが、シリアライゼーションとファイルシステムは使いたいんだよな Lapackもっと気持ちよく使えるようにして欲しいなあ boost::geometryって2Dは充実してきてるけど、3Dへの拡張は現状どんな感じですか? 2010年くらいに将来やる予定って開発者が言ってた気がするけど フォーラム見たら3Dへの拡張は全体的にまだまだって感じですね せっかくトレイト使ってジェネリックにやってるんだから早く実装して欲しい・・・ read_iniでファイルを読み込んだ時 セクションが1つも設定されていない場合にエラーを出力したいのですが セクションだけを取得する方法はありますか? 漠然とした質問ですみません。 boostのバージョンは1.54です >>290 ID変わりました。>>289 です。 ご回答ありがとうございます ファイルの中身が、str=100だけなど セクション名が無く、キーとキー値しかない場合 にもエラーを出力したかったので感謝です。 また質問ですみません。 iniファイルにセクション名のみ書かれている場合にエラーを出力したいのですが >>290 の方法でやってもセクション名を取得出来ませんでした。read_iniで確認するには どうすればいいでしょうか? >>292 boost/property_tree/ini_parser.hppの105行目と141行目で 読みだしたセクションにキーがないときはそのセクションの情報を捨ててる だから、セクション名だけのiniファイルを読み込ませたときは 空のiniファイルを読み込ませたのと同じ状態になるみたい 見たのは1.61だけど、1.54も多分同じ >>294 ちゃんと次期標準としての役割は果たしてて、 次のC++ではfilesystemやoptionalが取り込まれるよ バージョンアップがちょくちょくあるから、仕事ではちょっと使いづらいところもあるのかも ですよね。thread関連はメンテだけになるかもしれませんが。 UTF-16デフォルトなWindowsだと使いにくくてなぁ そうなんですか? 未だにSJISだと思ってましたw SJISでしか動かないのは、batのバッチプログラムぐらい。 ファイルにSJISに含まれない文字を含むファイル名をつけて、batで呼び出せるかどうか試してみればいい。 Win2000/XP に移行した時に Unicode ベースのシステムになった でもレガシーなAPIを大事にお守りするせいでなかなか SJISが死なない Windows10 と心中することになりそうだな NT系は最初の3.1からUnicodeなんだが 5.0の時にUCS-2からUTF-16になったくらいで VCのコンパイルオプションにBOM無しUTF-8読み込みの許可を加えるまでは糞 BOMつければ済むC/C++コンパイラよりUTF-8を一切受け付けないリソースコンパイラの方を先になんとかしてくれ Pragma Directives https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa381031 (v=vs.85).aspx This pragma is not supported in an included resource file (.rc). Therefore, example: #include "English.rc" #pragma code_page(932) #include "Japanese.rc" >>306-307 それ使ってもBOM入れるとエラーとかC/C++ソースと逆の状態で地獄の様相を呈してるぞ おまけにリソースエディタで編集すると問答無用でCP932で上書きされるという なんでboost.guiがないの? チャラくなっちゃうから? どのgui環境に対するtoolkitを要求してるの? beginとかendとか書くの面倒だな〜と思ってboost.range.algorithmsを調べてると 途中から|=とかadaptorsとか出てくるのですが これは同じライブラリの話なのでしょうか? もしくは全く別の二つのライブラリなのでしょうか? >>311 どちらもBoostライブラリの一部 さらに、どちらもBoost.Rangeライブラリの一部 ヘッダファイルは別 boost/range/algorithm.hpp boost/range/adaptors.hpp お互いに独立しているから、別々に使っても問題ない Eigenでもublasでも動く行列計算プログラムをテンプレート使えば出来ないかな size1,size2とcolums,rowsが互換ないので挫折してるんだけど すんごい初歩的な質問で申し訳ないんだけど、 boost::serializeを使用するとき、register_typeを行う責任は誰にあるんだろう。 保存したいオブジェクトツリーをすべて内包するenvironmentクラスで一括して すべてのクラスのregister_typeを行うべきなのか、それともその中の個別オブジェクト単位で 自身及びその子が使用する可能性のあるクラスのみを扱うべきなのか。 たとえば、 environmentクラスの中にdomain1とdomain2のサブオブジェクトツリーがあり、 シリアライズ順もdomain1->domain2とした場合、 domain2内でのみ使用していたクラスをdomain1でも使うように拡張することになって、 そちらでもregister_typeを行うことになると、オブジェクトidの対応が崩れちゃうよね このケースではシリアライズのバージョンで対応できる範囲を逸脱しちゃうと思うんだけど。 どうするべきなんだろう。 そういうケースではBOOST_CLASS_EXPORT系のマクロで明示的にクラスとシリアライズ用IDを関連付けするんじゃないか boost liberty の全API をテストするコードってある? ごめん、質問が悪かった。 Boost Library の 全API をテストするテストコードはありますか? 全APIのテストなのか中身は知らないがこのへん関連だろ ttps://github.com/boostorg/regression Allocatorだけ変えればcudaでも動く? deviceという不思議な修飾子をtempleteに入れる方法がわからないが double ar[50]; ublas::matrix au(10,50,ar); みたいなことをeigenだとmapで できるけどublasはどうすればいいの? 1.64で入ったこのバグが1.65でも直ってない https://svn.boost.org/trac10/ticket/12723 adjustments to make test_dll_simple pass とかふざけた理由で必須ヘッダーを勝手に削除するとかなめてんのか死ね boost::spiritで質問させてください http://www.kmonos.net/alang/boost/classes/spirit.html このサンプルコードで四則演算をやっている部分がありますが、resultの型をvector<char>などにして int型の計算結果ではなく+-/*の4つの演算子をresultで取得するにはどのようにすればよいのでしょうか。 出力される演算子の順番は数があっていればよいです。 >>327 どいう出力がほしいのかがよくわかんないんだけど、適当な入出力の例を出してもらえます? >>328 1+2-3/4*5*5*5*5 と入力したら result[0]が'+' result[1]が'-' result[2]が'/' result[3]が'*' result[4]が'*' result[5]が'*' result[6]が'*'といった感じに取得したいです。 resultをvector<int>として result[0]が1 result[1]が2 result[2]が3 result[3]が4 result[4]が5 result[5]が5 result[6]が5 でもいいです。 要は、パースしたときの任意の要素を取得したい、ということです。 >>326 1.65で直ってるようだが 削除された boost/serialization/detail/get_data.hpp をincludeしてるやつが残ってただけの問題ぽい ublasで蜜行列演算にmkl使えるのは知ってるけど、疎行列演算には使える? boost.stacktraceで出力が以下のようになり、行数やファイル名が出力されません。 create a window.0x2C8766FA (dbgeng.dll) で例外がスローされました (app.exe 内): 0xC000001D: Illegal Instruction 0# 0x001E08DA in app 1# 0x001CF856 in app ... 9# 0x001F3C28 in app 10# BaseThreadInitThunk in kernel32 11# RtlInitializeExceptionChain in ntdll 12# RtlInitializeExceptionChain in ntdll ・環境…visual studio 2017 community&Nugetで取得したboost-vc141 ・再現するコード #define BOOST_STACKTRACE_LINK #define BOOST_STACKTRACE_USE_WINDBG #define BOOST_STACKTRACE_USE_ADDR2LINE #include <boost/stacktrace.hpp> #include <iostream> #pragma comment(lib, "libboost_stacktrace_windbg-vc141-mt-gd-x32-1_66.lib") void f() {std::cout << boost::stacktrace::stacktrace();} int main() {f(); return 0;} Nugetで取得したboostは以下のようなフォルダがあり、そのなかにlibboost_stacktrace_**.libがあります。 boost_stacktrace_noop-vc141.1.66.0.0 boost_stacktrace_windbg_cached-vc141.1.66.0.0 boost_stacktrace_windbg-vc141.1.66.0.0 boost_stacktrace_addr2line-vc141.1.66.0.0みたいな名前のフォルダがないため、libboost_stacktrace_addr2line**.libみたいなファイルもありません。それが原因な気がするのですがNugetで取得するのではなくソースからビルドしても変わらない気がします。 なのでboost.stacktraceはmsvcでは行数表示はサポートしていないということではないかと思っているのですが、あってるでしょうか? read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる