c_cpp:boost

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
c_cpp:boost [2020/08/27 04:00] – [Windows 上の Visual C++ 2019 Preview でビルドする場合] ともやんc_cpp:boost [2021/07/05 02:02] (現在) ともやん
行 1: 行 1:
-<html> 
-  <style> 
-    #result pre, #mincode pre { 
-      overflow: hidden; 
-      font-size: 10px; 
-    } 
-    #result_long pre, #mincode_long pre  { 
-      height: 250px; 
-      overflow: scroll; 
-      overflow-x: hidden; 
-      font-size: 10px; 
-    } 
-    #mintbl table { 
-      font-size: 12px; 
-    } 
-    .dokuwiki .plugin_wrap table { 
-      width: auto; 
-    } 
-    #logo { 
-      background-color: white; 
-      padding: 10px; 
-      width: fit-content; 
-    } 
-    #logo p { 
-      margin: 0; 
-    } 
-  </style> 
-</html> 
 ====== Boost C++ Libraries ====== ====== Boost C++ Libraries ======
 {{c_cpp:boost_c_libraries.png?277|Boost C++ Libraries}}\\ {{c_cpp:boost_c_libraries.png?277|Boost C++ Libraries}}\\
行 33: 行 5:
 \\ \\
 **Boost** (ブースト) とは、C++ の先駆的な開発者のコミュニティ、およびそのコミュニティによって公開されているオープンソースのソフトウェアライブラリのことを指す。コミュニティとしての Boost は C++ 標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあり、Boost コミュニティは C++ の標準化において大きな影響力を有している。実際に標準化委員会が発表した「TR1」の2/3以上が Boost ライブラリを基にしている。Random, Regex, Thread などはいずれも C++11 規格の標準ライブラリとして正式に導入・標準化されている。このことから、Boost は考案された新機能を標準化させる前の試験運用の場であるとも言える。\\ **Boost** (ブースト) とは、C++ の先駆的な開発者のコミュニティ、およびそのコミュニティによって公開されているオープンソースのソフトウェアライブラリのことを指す。コミュニティとしての Boost は C++ 標準化委員会の委員により設立されており、現在でもその多くが構成員として留まっている。このような経緯もあり、Boost コミュニティは C++ の標準化において大きな影響力を有している。実際に標準化委員会が発表した「TR1」の2/3以上が Boost ライブラリを基にしている。Random, Regex, Thread などはいずれも C++11 規格の標準ライブラリとして正式に導入・標準化されている。このことから、Boost は考案された新機能を標準化させる前の試験運用の場であるとも言える。\\
-\\+
 Boost で公開されるライブラリはコミュニティの公開レビューによって精選されている。Boost を使用して作成したプログラムは、商用、非商用を問わず無償の Boost Software License の下でライセンスされる。\\ Boost で公開されるライブラリはコミュニティの公開レビューによって精選されている。Boost を使用して作成したプログラムは、商用、非商用を問わず無償の Boost Software License の下でライセンスされる。\\
-\\+
 Boost はテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングの技法を取り入れて行く傾向がある。そのため Boost ライブラリの利用者には C++ の現代的な記述に慣れていることを要求される。\\ Boost はテンプレートなどを活用して積極的にメタプログラミングやジェネリックプログラミングの技法を取り入れて行く傾向がある。そのため Boost ライブラリの利用者には C++ の現代的な記述に慣れていることを要求される。\\
-\\+
 このライブラリは、先鋭的な技術を好むプログラマーが積極的に使用していることで有名である。\\ このライブラリは、先鋭的な技術を好むプログラマーが積極的に使用していることで有名である。\\
-\\+
 [[https://ja.wikipedia.org/wiki/Boost_C%2B%2B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA|Boost C++ライブラリ - Wikipedia]] より\\ [[https://ja.wikipedia.org/wiki/Boost_C%2B%2B%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA|Boost C++ライブラリ - Wikipedia]] より\\
  
行 2112: 行 2084:
 </code> </code>
 </WRAP> </WRAP>
 +
 +==== ソースコードからビルド ====
 +下記の内容は正式対応前に **Visual Studio 2019 Preview** で、最新の **Boost** をソースコードからビルドした。\\
 +**Boost** が正式対応しているコンパイラでは、これほど苦労はしない。\\
 +  - タスクバーの「ここに入力して検索」に sysdm.cpl を入力して Enter キーを押す。
 +  - 「システムのプロパティ」の「詳細設定」タブの[環境変数]ボタンを押して「環境変数」画面を開く。
 +  - 「環境変数」画面の [システム環境変数] の [新規] ボタンを押して以下の環境変数を登録する。<code>
 +変数名: BOOST
 +変数値: C:\Libraries\boost
 +</code>
 +  - タスクバーの「ここに入力して検索」に cmd を入力して「コマンドプロンプト」を「管理者として実行」する。
 +  - 「コマンドプロンプト」以下のコマンドを入力する。<WRAP prewrap 100%><code>
 +> cd %BOOST%
 +> bootstrap.bat
 +</code></WRAP><WRAP prewrap 100% #result><code>
 +Building Boost.Build engine
 +
 +Generating Boost.Build configuration in project-config.jam for msvc...
 +
 +Bootstrapping is done. To build, run:
 +
 +    .\b2
 +
 +    To generate header files, run:
 +
 +    .\b2 headers
 +
 +To adjust configuration, edit 'project-config.jam'.
 +Further information:
 +
 +    - Command line help:
 +    .\b2 --help
 +
 +    - Getting started guide:
 +    http://boost.org/more/getting_started/windows.html
 +
 +    - Boost.Build documentation:
 +    http://www.boost.org/build/
 +</code></WRAP>
 +  - 現時点で bjam は **Visual Studio 2019 Preview** に対応していないので msvc.jam を修正する。<WRAP prewrap 100% mincode><file diff %BOOST%\tools\build\src\tools\msvc.jam.patch>
 +24d23
 +< * Visual Studio 2019—14.2
 +1019c1018
 +<             if [ MATCH "(14.[12])" : $(version) ]
 +---
 +>             if [ MATCH "(14.1)" : $(version) ]
 +1179c1178
 +<         exact-version = [ MATCH "(14\.[12]0\.[0-9\.]+)" : $(command) ] ;
 +---
 +>         exact-version = [ MATCH "(14\.10\.[0-9\.]+)" : $(command) ] ;
 +1208,1212c1207
 +<             if [ MATCH "(MSVC\\14.2)" : $(command) ]
 +<             {
 +<                 version = 14.2 ;
 +<             }
 +<             else if [ MATCH "(MSVC\\14.1)" : $(command) ]
 +---
 +>             if [ MATCH "(MSVC\\14.1)" : $(command) ]
 +1542c1537
 +<         if $(version) = 14.1 || $(version) = 14.2 || $(version) = "default"
 +---
 +>         if $(version) = 14.1 || $(version) = "default"
 +1964c1959
 +< .known-versions = 14.2 14.1 14.0 12.0 11.0 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1
 +---
 +> .known-versions = 14.1 14.0 12.0 11.0 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1
 +1978d1972
 +< .version-alias-14.2 = 14.2 ;
 +2007,2010d2000
 +< .version-14.2-path =
 +<     "../../VC/Tools/MSVC/*/bin/Host*/*"
 +<     "Microsoft Visual Studio/2019/Preview/VC/Auxiliary/Build"
 +<     ;
 +2012d2001
 +< .version-14.2-env = VS160COMNTOOLS ProgramFiles ProgramFiles(x86) ;
 +</file></WRAP>
 +    - *** Visual Studio 2019—14.2** コメント追加。
 +    - **if [ MATCH "(14.1)" : $(version) ]** を **if [ MATCH "(14.[12])" : $(version) ]** に修正。
 +    - **exact-version = [ MATCH "(14\.10\.[0-9\.]+)" : $(command) ] ;** を **exact-version = [ MATCH "(14\.[12]0\.[0-9\.]+)" : $(command) ] ;** に修正。
 +    - **if [ MATCH "(MSVC\\14.1)" : $(command) ]** を <WRAP prewrap 100% mincode><code autoconf>
 +if [ MATCH "(MSVC\\14.2)" : $(command) ]
 +{
 +    version = 14.2 ;
 +}
 +else if [ MATCH "(MSVC\\14.1)" : $(command) ]
 +</code></WRAP> に修正。
 +    - **if $(version) = 14.1 || $(version) = "default"** を **if $(version) = 14.1 || $(version) = 14.2 || $(version) = "default"** に修正。
 +    - **.known-versions = 14.1 14.0 12.0 11.0 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1** を **.known-versions = 14.2 14.1 14.0 12.0 11.0 10.0 10.0express 9.0 9.0express 8.0 8.0express 7.1** に修正。
 +    - **.version-alias-14.2 = 14.2 ;** を追記。
 +    - <WRAP prewrap 100% mincode><code autoconf>
 +.version-14.2-path =
 +     "../../VC/Tools/MSVC/*/bin/Host*/*"
 +     "Microsoft Visual Studio/2019/Preview/VC/Auxiliary/Build"
 +     ;
 +</code></WRAP> を追記。
 +    - **.version-14.2-env = VS160COMNTOOLS ProgramFiles ProgramFiles(x86) ;** を追記。
 +  - 「スタート」の「Visual Studio 2019」より「x86 Native Tools Command Prompt for VS 2019」または「x64 Native Tools Command Prompt for VS 2019」を起動して、以下のコマンドを入力する。<WRAP prewrap 100%><code>
 +> bjam --toolset=msvc link=static,shared runtime-link=static,shared release debug stage
 +</code></WRAP>
 +  - 以下のようにコンパイルが開始される。<WRAP prewrap 100% #result><code>
 +Performing configuration checks
 +
 +    - 32-bit                   : yes (cached)
 +    - arm                      : no  (cached)
 +    - mips1                    : no  (cached)
 +~省略~
 +        cl /c /nologo /TP /Fovc_mswud_x64\gllib_glcmn.obj /MDd /DWIN32  /Zi  /Fd..\..\lib\vc_x64_lib\wxmsw31ud_gl.pdb  /D_DEBUG /Od /D_CRT_SECURE_NO_DEPRECATE=1  /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1   /D__WXMSW__         /D_UNICODE /I..\..\lib\vc_x64_lib\mswud /I..\..\include   /W4 /DWXBUILDING /I..\..\src\tiff\libtiff  /I..\..\src\jpeg /I..\..\src\png /I..\..\src\zlib /I..\..\src\regex  /I..\..\src\expat\expat\lib /GR /EHsc  /Yu"wx/wxprec.h" /Fp"vc_mswud_x64\wxprec_gllib.pch"   ..\..\src\common\glcmn.cpp
 +glcmn.cpp
 +        cl /c /nologo /TP /Fovc_mswud_x64\gllib_glcanvas.obj /MDd /DWIN32  /Zi  /Fd..\..\lib\vc_x64_lib\wxmsw31ud_gl.pdb  /D_DEBUG /Od /D_CRT_SECURE_NO_DEPRECATE=1  /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1   /D__WXMSW__         /D_UNICODE /I..\..\lib\vc_x64_lib\mswud /I..\..\include   /W4 /DWXBUILDING /I..\..\src\tiff\libtiff  /I..\..\src\jpeg /I..\..\src\png /I..\..\src\zlib /I..\..\src\regex  /I..\..\src\expat\expat\lib /GR /EHsc  /Yu"wx/wxprec.h" /Fp"vc_mswud_x64\wxprec_gllib.pch"   ..\..\src\msw\glcanvas.cpp
 +glcanvas.cpp
 +        if exist ..\..\lib\vc_x64_lib\wxmsw31ud_gl.lib del ..\..\lib\vc_x64_lib\wxmsw31ud_gl.lib
 +        link /LIB /NOLOGO /OUT:..\..\lib\vc_x64_lib\wxmsw31ud_gl.lib @C:\Users\tomoyan\AppData\Local\Temp\nmFCDF.tmp
 +</code></WRAP>
 +  - ビルドが完了すると以下の出力が得られる。<code>
 +include path: %BOOST%
 +library path: %BOOST%\stage\lib
 +</code>
 +
 +=== auto_link.hpp の修正 ===
 +現時点で boost は Visual Studio 2019 のオートリンクに対応していないので auto_link.hpp を修正する。
 +<WRAP prewrap 100% mincode>
 +<file diff %BOOST%\boost\config\auto_link.hpp.patch>
 +176c176
 +< #  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1920)
 +---
 +> #  elif defined(BOOST_MSVC)
 +180,184d179
 +
 +< #  elif defined(BOOST_MSVC)
 +
 +<      // vc14.2:
 +< #    define BOOST_LIB_TOOLSET "vc142"
 +</file>
 +</WRAP>
 +  - **#  elif defined(BOOST_MSVC)** を **#  elif defined(BOOST_MSVC) && (BOOST_MSVC < 1920)** に修正。
 +  - <WRAP prewrap 100% mincode><code cpp>
 +#  elif defined(BOOST_MSVC)
 + 
 +     // vc14.2:
 +#    define BOOST_LIB_TOOLSET "vc142"
 +</code></WRAP> を追記。
 +
 +=== 参考 ===
 +<WRAP prewrap 100% mintbl>
 +^  表記  ^  製品名  ^  VC++ Version  ^  _MSC_VER  ^  _MSC_FULL_VER  ^
 +| 2019  | Visual Studio 2019\\ Version 16.1.2  |  14.21  |  1921 |  192127702 |
 +| 2019 Preview  | Visual Studio Enterprise 2019 Preview\\ Version 16.0.0 Preview 2.2  |  14.20  |  1920 |  192027305 |
 +| 2017 Update 7  | Visual Studio 2017 Version 15.7.5  |  14.14  |  1914 |  191426433 |
 +</WRAP>
 +[[windows:visualstudio#visual_studio_と_vc_マクロ定義|Visual Studio と VC++ マクロ定義]]\\
  
 ===== Linux でのインストール ===== ===== Linux でのインストール =====
行 2146: 行 2268:
 ※**variant=debug,release**にすると**address-model=64 architecture=x86**を指定しても**Name clash for xxx**エラーが発生してビルドできなかった。\\ ※**variant=debug,release**にすると**address-model=64 architecture=x86**を指定しても**Name clash for xxx**エラーが発生してビルドできなかった。\\
 ※**--buildid=d**はデバッグ版のライブラリ名に-dを付ける。\\ ※**--buildid=d**はデバッグ版のライブラリ名に-dを付ける。\\
- 
-===== ビルド/インストール ===== 
  
  
-===== 利用方法 ===== +===== ライブラリの利用方法 ===== 
-[[c_cpp:boost:boost_python|Boost.Python]] - Boost Python Library は、Python と C++ を連携させるためのフレームワークです。Dave Abrahams の C++ コンパイラだけで、特別なツールを使用することなく、C++ クラスの関数やオブジェクトを Python に素早くシームレスに公開できる。\\+[[c_cpp:boost:boost_python|Boost.Python - Boost Python Library]]\\
  
 ===== 参考文献 ===== ===== 参考文献 =====
 [[https://boostjp.github.io/howtobuild.html|Boostライブラリのビルド方法 - boostjp]]\\ [[https://boostjp.github.io/howtobuild.html|Boostライブラリのビルド方法 - boostjp]]\\
 +[[git>boost-ext/di|boost-ext/di: DI: C++14 Dependency Injection Library]]\\
  
 +==== 付録 ====
 +[[tw>tomoyan596/status/1404143924428480512|〇 DI (Dependency Injection) × PI(Pregnancy Injection) YouTubeの字幕がおかしいだけですねぇ😅💦 / Twitter]]\\
  
  • c_cpp/boost.1598468456.txt.gz
  • 最終更新: 2020/08/27 04:00
  • by ともやん