SlideShare a Scribd company logo
1 of 113
Download to read offline
家に帰るまでが遠⾜です.

         2012/07/28 Cryolite
           Boost.勉強会 #10 東京

                        1
家に帰るまでが遠⾜です.




               2
遠⾜が終わって
安⼼していませんか?




             3
ソースコードを書き終わっ
て安⼼していませんか?




               4
ソースコードを書き終わっ
て安⼼していませんか?

   プリプロセスが終わった
   だけで安⼼していませんか?




               5
ソースコードを書き終わっ
て安⼼していませんか?

   プリプロセスが終わった
   だけで安⼼していませんか?

   コンパイルが終わった
   だけで安⼼していませんか?

               6
ソースコードを書き終わっ
て安⼼していませんか?

    プリプロセスが終わった
    だけで安⼼していませんか?

    コンパイルが終わった
    だけで安⼼していませんか?
※彼らは特殊な訓練を受けています
  決して真似しないでください    7
ソースコードを書き終わっ
て安⼼していませんか?

    プリプロセスが終わった
    だけで安⼼していませんか?

    コンパイルが終わった
    だけで安⼼していませんか?
※彼らは特殊な訓練を受けています
  決して真似しないでください    8
プログラムを実⾏する
までが C++ です.




              9
プログラムを実⾏する
 までが C++ です.

$ g++ ‐c main.cpp




                    10
プログラムを実⾏する
 までが C++ です.

$ g++ ‐c main.cpp
$ g++ main.o




                    11
プログラムを実⾏する
 までが C++ です.

$ g++ ‐c main.cpp
$ g++ main.o
$ ./a.out



                    12
プログラムを実⾏する
 までが C++ です.

$ g++ ‐c main.cpp
$ g++ main.o
$ ./a.out
Segmentation fault (core dumped)


                               13
プログラムを実⾏する
 までが C++ です.

$ g++ ‐c main.cpp
$ g++ main.o
$ ./a.out
Segmentation fault (core dumped)
  ここまでが C++ による
   プログラミングです                   14
実⾏するまでが C++ です.

          2012/07/28 Cryolite
            Boost.勉強会 #10 東京

                         15
C++ プログラムを
実⾏するには
•コンパイルして,
•リンクして,
•実⾏する必要があります



               16
C++ プログラムを
実⾏するには
•コンパイルして,
•リンクして,
•実⾏する必要があります,が!



             17
C++ プログラムを
実⾏するには
•コンパイルして,
•リンクして,
•実⾏する必要があります,が!



             18
こういうことがしたいと
思ったことはありませんか?




                19
複数のビルド設定で
同時⼀⻫にビルドしたい




              20
デバッグビルド &
 リリースビルド
                    デバッグ情報あり
                      最適化なし
$ g++ ‐g main.cpp

       and          デバッグ情報なし
                      最適化あり
$ g++ ‐O3 main.cpp
                          21
シングルスレッド &
マルチスレッド
                  スレッドなし
$ g++ ‐DSINGLE_THREAD 
main.cpp
       and          スレッドあり
$ g++ ‐DMULTI_THREAD 
‐pthread main.cpp
                       22
コンパイラの
 複数のバージョン

$ g++‐4.6 main.cpp

       and
$ g++‐4.7 main.cpp

                     23
旧規格 & 新規格

$ g++ ‐std=c++03 main.cpp

           and
$ g++ ‐std=c++11 main.cpp
                            24
複数のコンパイラ

$ g++ main.cpp

       and
$ clang++ main.cpp

                     25
どうすれば実現できる?




              26
どうすれば実現できる?




              27
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam variant=debug,release


                            28
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam variant=debug,release
         feature
 (ビルド設定の各側⾯を抽象化したもの)
                            29
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam variant=debug,release
            feature の値

                            30
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam variant=debug,release
    デバッグビルドとリリースビルドを
        同時⼀⻫にビルド
                            31
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam
threading=single,multi
       スレッドのある・なしを
        同時⼀⻫にビルド            32
Boost.Build を使えば……

# jamfile
exe main.exe : main.cpp ;

$ bjam toolset=gcc‐4.6.3,gcc‐4.7.1 
variant=debug,release
threading=single,multi

                               33
{GCC 4.6.3, GCC 4.7.1}
                ×
Boost.Build を使えば……
   {デバッグビルド,リリースビルド}
                ×
  {シングルスレッド,マルチスレッド}
# jamfile
exe main.exe : main.cpp ;
     の合計8通りのビルド設定同時⼀⻫

$ bjam toolset=gcc‐4.6.3,gcc‐4.7.1 
variant=debug,release
threading=single,multi

                               34
Boost.Build の中で
何が起こってるのか?




                  35
Boost.Build の中で
何が起こってるのか?




     Boost.Build の
    中身を見てみよう         36
Boost.Build のターゲットと
実際のファイルは一対多


# jamfile
exe main.exe
  : main.cpp ;


                      37
Boost.Build のターゲットと
実際のファイルは一対多
  <variant>debug
                   bin/debug/main.o
# jamfile          bin/debug/main
exe main.exe
  : main.cpp ;


                                      38
Boost.Build のターゲットと
実際のファイルは一対多
  <variant>debug
                     bin/debug/main.o
# jamfile            bin/debug/main
exe main.exe
  : main.cpp ;
                     bin/release/main.o
  <variant>release
                     bin/release/main   39
Boost.Build のターゲットと
実際のファイルは一対多
  <variant>debug
                    bin/debug/main.o
# jamfile           bin/debug/main
exe main.exe    feature が依存物の
  : main.cpp ; パスとして埋め込まれる
                    bin/release/main.o
 <variant>release
                    bin/release/main   40
41
こういうことがしたいと
思ったことはありませんか?




                42
依存物全部に同じ
ビルド設定を反映させたい




               43
最終成果物がリリースなら
  中間⽣成物も全部リリース


foo.o

bar.o          リリースビルド
         リンク
                実⾏バイナリ
main.o

                   44
最終成果物がリリースなら
  中間⽣成物も全部リリース


foo.o          最終成果物をリリース
               ビルドするなら……
bar.o            リリースビルド
         リンク
                  実⾏バイナリ
main.o

                      45
最終成果物がリリースなら
 中間⽣成物も全部リリース
   中間⽣成物も全部
   リリースビルド
foo.o                   最終成果物をリリース
 $ g++ ‐O3 –c foo.cpp   ビルドするなら……
bar.o                     リリースビルド
           リンク
$ g++ ‐O3 –c bar.cpp       実⾏バイナリ
main.o
$ g++ ‐O3 –c main.cpp
                               46
最終成果物がデバッグなら
  中間⽣成物も全部デバッグ


foo.o

bar.o          デバッグビルド
         リンク
                実⾏バイナリ
main.o

                   47
最終成果物がデバッグなら
  中間⽣成物も全部デバッグ


foo.o          最終成果物をデバッグ
               ビルドするなら……
bar.o            デバッグビルド
         リンク
                  実⾏バイナリ
main.o

                      48
最終成果物がデバッグなら
 中間⽣成物も全部デバッグ
   中間⽣成物も全部
   デバッグビルド
foo.o                  最終成果物をデバッグ
 $ g++ ‐g –c foo.cpp   ビルドするなら……
bar.o                    デバッグビルド
           リンク
$ g++ ‐g –c bar.cpp       実⾏バイナリ
main.o
$ g++ ‐g –c main.cpp
                              49
共有ライブラリをビルドす
  るなら中間⽣成物全部 PIC


foo.o

bar.o
        リンク      libfoo.so

baz.o

              Linux/ELF      50
共有ライブラリをビルドす
  るなら中間⽣成物全部 PIC


foo.o          共有ライブラリを
              ビルドするなら……
bar.o
        リンク      libfoo.so

baz.o

              Linux/ELF      51
共有ライブラリをビルドす
 るなら中間⽣成物全部 PIC
     中間⽣成物
     全部 PIC
foo.o                      共有ライブラリを
 $ g++ ‐fPIC –c foo.cpp   ビルドするなら……
bar.o
                             libfoo.so
$ g++ ‐fPIC リンク
             –c bar.cpp
baz.o
$ g++ ‐fPIC –c baz.cpp
                          Linux/ELF      52
どうすれば実現できる?




              53
どうすれば実現できる?




              54
Boost.Build を使えば……

# jamfile
exe main.exe
  : main.cpp foo.cpp bar.cpp ;

$ bjam variant=release main.exe

        全ての中間⽣成物が
         リリースでビルド                 55
Boost.Build の中で
何が起こってるのか?




                  56
Boost.Build の中で
何が起こってるのか?




     Boost.Build の
    中身を見てみよう         57
feature の伝播
(feature propagation)

# jamfile
obj foo.obj : foo.cpp ;
obj main.obj : main.cpp ;
exe main.exe
  : main.obj foo.obj ;


                            58
feature の伝播
(feature propagation)

# jamfile
obj foo.obj : foo.cpp ;
obj main.obj : main.cpp ;
exe main.exe
  : main.obj foo.obj ;
$ bjam variant=debug main.exe
                                59
feature の伝播
(feature propagation)
foo.cpp              main.cpp

foo.obj              main.obj




                     jamfile 上の依存関係
          main.exe
                                60
feature の伝播
(feature propagation)
foo.cpp                main.cpp

foo.obj                main.obj




          main.exe
              <variant>debug
                                  61
feature の伝播
(feature propagation)
foo.cpp                   main.cpp

foo.obj                   main.obj
    <variant>debug            <variant>debug



             main.exe
                 <variant>debug
                                          62
feature の伝播
(feature propagation)
    依存先の feature が
foo.cpp            main.cpp
依存元へ⾃動的に伝播する
foo.obj                   main.obj
    <variant>debug            <variant>debug



             main.exe
                 <variant>debug
                                          63
feature の伝播
(feature propagation)
foo.cpp                   main.cpp

foo.obj                   main.obj
    <variant>debug            <variant>debug



             main.exe
                 <variant>debug
                                          64
feature の伝播
(feature propagation)
foo.cpp                   main.cpp

foo.obj                   main.obj
    <variant>debug            <variant>debug

          以下,さっきの復習

             main.exe
                 <variant>debug
                                          65
feature の伝播
(feature propagation)
foo.cpp                  main.cpp

foo.obj                  main.obj
    <variant>debug           <variant>debug
    bin/debug/foo.o          bin/debug/main.o


             main.exe
                 <variant>debug
                                        66

                 bin/debug/main
feature の伝播
(feature propagation)
foo.cpp                  main.cpp

foo.obj                  main.obj
    <variant>debug           <variant>debug
    bin/debug/foo.o          bin/debug/main.o


             main.exe
                 <variant>debug
                                        67

                 bin/debug/main
feature の伝播
(feature propagation)
foo.cpp                  main.cpp
$ g++ ‐g ‐c foo.cpp     $ g++ ‐g ‐c main.cpp
foo.obj                  main.obj
    <variant>debug           <variant>debug
    bin/debug/foo.o          bin/debug/main.o
                $ g++ foo.o main.o –o main
            main.exe
                <variant>debug
                                        68

                bin/debug/main
feature の伝播
(feature propagation)
foo.cpp                  main.cpp
$ g++ ‐g ‐c foo.cpp     $ g++ ‐g ‐c main.cpp
foo.obj                  main.obj
           やりたかったことが
    <variant>debug           <variant>debug
             実現できました
    bin/debug/foo.o          bin/debug/main.o
                $ g++ foo.o main.o –o main
            main.exe
                <variant>debug
                                        69

                bin/debug/main
feature の伝播
(feature propagation)

# jamfile
obj foo.obj : foo.cpp ;
obj main.obj : main.cpp ;
exe main.exe
  : main.obj foo.obj ;
$ bjam variant=release main.exe
                                  70
feature の伝播
(feature propagation)

# jamfile
obj foo.obj : foo.cpp ;
obj main.obj : main.cpp ;
exe main.exe
  : main.obj foo.obj ;
$ bjam variant=debug,release main.exe
                                 71
72
こういうことで困った
ことはありませんか?




             73
// foo.hpp
class Foo
{
  .....
#if defined(CHECK)
  DebugInfo dbg_info_;
#endif
};




                         74
// foo.hpp マクロ定義で
class Foo
             ABI が変化
{
  .....
#if defined(CHECK)
  DebugInfo dbg_info_;
#endif
};




                         75
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
          #endif
  bar.cpp };                   main.cpp




                                      76
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
          #endif
  bar.cpp };                   main.cpp
$ g++ ‐DCHECK –c bar.cpp   $ g++ –c main.cpp

   bar.o                          main.o


                                           77
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
          #endif
  bar.cpp };                   main.cpp
$ g++ ‐DCHECK –c bar.cpp   $ g++ –c main.cpp

   bar.o   Foo のオブジェクトをやり取り       main.o


                                           78
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
          #endif
  bar.cpp };                   main.cpp
$ g++ ‐DCHECK –c bar.cpp   $ g++ –c main.cpp

   bar.o   Foo のオブジェクトをやり取り       main.o

           $ g++ main.o bar.o

                  a.out                    79
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
          #endif
  bar.cpp };                   main.cpp
$ g++ ‐DCHECK –c bar.cpp   $ g++ –c main.cpp

   bar.o   Foo のオブジェクトをやり取り       main.o

           $ g++ main.o bar.o

                  a.out                    80
// foo.hpp マクロ定義で
          class Foo
                       ABI が変化
          {
            .....
          #if defined(CHECK)
#include DebugInfo dbg_info_; #include
            ABI を変化させる
          #endif
  bar.cpp };                   main.cpp
              マクロ定義を
             安全に扱いたい
$ g++ ‐DCHECK –c bar.cpp $ g++ –c main.cpp

   bar.o   Foo のオブジェクトをやり取り     main.o

           $ g++ main.o bar.o

                 a.out                   81
ユーザ定義の ABI をビルド
チェイン全体で統⼀したい




                  82
どうすれば解決できる?




              83
どうすれば解決できる?




              84
Boost.Build を使えば……
# jamfile
import feature ;

feature.feature check
  : off on : propagated ;

feature.compose <check>on
  : <define>CHECK ;         85
Boost.Build を使えば……
# jamfile         新しい feature
               <check> をユーザ定義
import feature ;

feature.feature check
  : off on : propagated ;

feature.compose <check>on
  : <define>CHECK ;         86
Boost.Build を使えば……
# jamfile         新しい feature
               <check> をユーザ定義
import feature ;

feature.feature check
  : off on : propagated ; なら
                  <check>on
               “CHECK” マクロを定義
feature.compose <check>on
  : <define>CHECK ;         87
Boost.Build を使えば……
# jamfile
exe main.exe
  : bar.cpp main.cpp ;

 $ bjam check=on main.exe


         以下,さっきの復習
                            88
Boost.Build を使えば……
# jamfile
exe main.exe
  : bar.cpp main.cpp ;

 $ bjam check=off main.exe


                             89
Boost.Build を使えば……
# jamfile
exe main.exe
  : bar.cpp main.cpp ;

 $ bjam check=on,off main.exe


                                90
91
こういうことで困った
ことはありませんか?




             92
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so           test.o




                                 93
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐lfoo –o test

                test

                                  94
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐lfoo –o test

                test
   $ ./test
                                  95
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐lfoo –o test
 foo が見つからねーよ!


                                  96
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐L. ‐lfoo –o test

                test

                                  97
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐L. ‐lfoo –o test

                test
   $ ./test
                                  98
共有ライブラリに依存した
バイナリを実⾏したい
     foo.cpp
$ g++ ‐fPIC –shared …
    libfoo.so            test.o
 $ g++ test.o ‐L. ‐lfoo –o test

                test
   $ ./test
   libfoo.so 見つからねーよ!             99
どうすれば解決できる?




              100
どうすれば解決できる?




              101
Boost.Build を使えば……
# jamfile
lib foo.lib : foo.cpp ;
run test.run
  : test.obj foo.lib ;
 $ bjam test.run
          これだけで O.K.!
                          102
Boost.Build の中で
何が起こってるのか?




                  103
Boost.Build の中で
何が起こってるのか?




     Boost.Build の
    中身を見てみよう         104
usage-requirement
(これを使うならこうしろ!)
foo.lib              test.obj


          test.exe



          test.run
                                105
foo.lib の usage-requirements:
usage-requirement
           <library‐path>bin/debug
(これを使うならこうしろ!)<xdll‐path>bin/debug
foo.lib              test.obj


          test.exe



          test.run
                                 106
foo.lib の usage-requirements:
usage-requirement
           <library‐path>bin/debug
(これを使うならこうしろ!)<xdll‐path>bin/debug
foo.lib             test.obj
                 依存先に usage-req. が
                  ⾃動的に伝播する
          test.exe
           <library-path>bin/debug


          test.run
          <xdll-path>bin/debug
                                     107
usage-requirement
(これを使うならこうしろ!)
foo.lib                 test.obj


          test.exe
           <library-path>bin/debug


          test.run
          <xdll-path>bin/debug
                                     108
usage-requirement
(これを使うならこうしろ!)
foo.lib                     test.obj
    bin/debug/libfoo.so

              test.exe
               <library-path>bin/debug
                   bin/debug/test

              test.run
              <xdll-path>bin/debug
                                         109

                   bin/debug/test.run
usage-requirement
(これを使うならこうしろ!)
foo.lib                     test.obj
    bin/debug/libfoo.so

              test.exe $ g++ ‐Lbin/debug …
               <library-path>bin/debug
                   bin/debug/test
        $ LD_LIBRARY_PATH=bin/debug …
            test.run
              <xdll-path>bin/debug
                                       110

                  bin/debug/test.run
usage-requirement
(これを使うならこうしろ!)
foo.lib                     test.obj
    bin/debug/libfoo.so

     test.exe $ g++ ‐Lbin/debug …
やりたかったことが
      <library-path>bin/debug
 実現できました  bin/debug/test
        $ LD_LIBRARY_PATH=bin/debug …
            test.run
              <xdll-path>bin/debug
                                       111

                  bin/debug/test.run
まだまだ紹介して
いない機能・概念が
たくさんありますが
お時間となりました.

        112
Cry’s Diary
              or

                   #11 ??
                            113

More Related Content

What's hot

はじめての FuelPHP
はじめての FuelPHPはじめての FuelPHP
はじめての FuelPHP
Sho A
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
kenjis
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
 

What's hot (20)

Google container builderと友だちになるまで
Google container builderと友だちになるまでGoogle container builderと友だちになるまで
Google container builderと友だちになるまで
 
php-src の歩き方
php-src の歩き方php-src の歩き方
php-src の歩き方
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
はじめての FuelPHP
はじめての FuelPHPはじめての FuelPHP
はじめての FuelPHP
 
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
GoらしいAPIを求める旅路 (Go Conference 2018 Spring)
 
PHPの今とこれから2020
PHPの今とこれから2020PHPの今とこれから2020
PHPの今とこれから2020
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014 FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
 
FuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみたFuelPHPで3種のprofilerを使ってみた
FuelPHPで3種のprofilerを使ってみた
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
HHVM Hack
HHVM HackHHVM Hack
HHVM Hack
 
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 
FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみた
 

Viewers also liked

Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86
Priyanka Aash
 
ABI란 무엇인가요?
ABI란 무엇인가요?ABI란 무엇인가요?
ABI란 무엇인가요?
진상 문
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi
 
OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
Takuya ASADA
 

Viewers also liked (11)

左と右の話
左と右の話左と右の話
左と右の話
 
Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86Intra process memory protection for applications on ARM and x86
Intra process memory protection for applications on ARM and x86
 
Scheme to x86コンパイラ
Scheme to x86コンパイラScheme to x86コンパイラ
Scheme to x86コンパイラ
 
ABI란 무엇인가요?
ABI란 무엇인가요?ABI란 무엇인가요?
ABI란 무엇인가요?
 
C++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ているC++が仲間になりたそうにこちらを見ている
C++が仲間になりたそうにこちらを見ている
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
コルーチンの使い方
コルーチンの使い方コルーチンの使い方
コルーチンの使い方
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기C# 뉴비를 위한 맛보기
C# 뉴비를 위한 맛보기
 
SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]SMP Implementation for OpenBSD/sgi [Japanese Edition]
SMP Implementation for OpenBSD/sgi [Japanese Edition]
 
OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350OpenBSD/sgi SMP implementation for Origin 350
OpenBSD/sgi SMP implementation for Origin 350
 

Similar to 家に帰るまでが遠足です

Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
Kiwamu Okabe
 
Python開発環境三種の神器
Python開発環境三種の神器Python開発環境三種の神器
Python開発環境三種の神器
Yukitaka Uchikoshi
 

Similar to 家に帰るまでが遠足です (20)

ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 
Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介Debianを用いたCortex-M3マイコン開発事例のご紹介
Debianを用いたCortex-M3マイコン開発事例のご紹介
 
第2回勉強会スライド
第2回勉強会スライド第2回勉強会スライド
第2回勉強会スライド
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
Capistrano
CapistranoCapistrano
Capistrano
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要Klocwork C/C++解析チューニング 概要
Klocwork C/C++解析チューニング 概要
 
Build 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansaiBuild 番号の自動更新スクリプトについて #cocoa_kansai
Build 番号の自動更新スクリプトについて #cocoa_kansai
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
Sinatra and heroku for mac
Sinatra and heroku for macSinatra and heroku for mac
Sinatra and heroku for mac
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
Git (運用編)
Git (運用編)Git (運用編)
Git (運用編)
 
Python開発環境三種の神器
Python開発環境三種の神器Python開発環境三種の神器
Python開発環境三種の神器
 
behatエクステンションの作り方
behatエクステンションの作り方behatエクステンションの作り方
behatエクステンションの作り方
 
ソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグソフトウェア工学2023 10 デバッグ
ソフトウェア工学2023 10 デバッグ
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 

More from Cryolite (7)

Lambda in template_final
Lambda in template_finalLambda in template_final
Lambda in template_final
 
Allocators@C++11
Allocators@C++11Allocators@C++11
Allocators@C++11
 
Destructive Call
Destructive CallDestructive Call
Destructive Call
 
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)
 
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)
 
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)shared_ptr & weak_ptr (ppt 第2版, DL 専用)
shared_ptr & weak_ptr (ppt 第2版, DL 専用)
 
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)
 

家に帰るまでが遠足です