のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:124,054,512人
912,408,943頁
昨日:1,160人
1,940頁
今日:753人
1,194頁
最近の注目
人気の最安値情報
    これらのキーワードがハイライトされています:

    Page Top

    g++コンパイルの基本 anchor.png

    • 用意したソースコードとヘッダ
      • main.cxx Func.cxx Unit.cxx
      • Func.h Unit.h
    • ソースから実行ファイルの直接生成
      $g++ -o exec main.cxx Func.cxx Unit.cxx
      実行ファイル execができる。
    • 個々のソースに対応したオブジェクトファイル作成
      $g++ -c main.cxx Func.cxx Unit.cxx
      オブジェクトファイルmain.o Func.o Unit.oができる。
    • オブジェクトファイルから実行ファイルの生成
      $g++ -o exec main.o Func.o Unit.o
      オブジェクトファイルから実行ファイルexecを作成。
    • 複数のオブジェクトファイルを結合し静的ライブラリの作成
      $ar crv libtest.a Func.o Unit.o
      libtest.aというライブラリを作成
    • オブジェクト+ライブラリから実行ファイルの生成
      $g++ exec main.o libtest.a
      • nm コマンド
        • ライブラリや実行ファイルに含まれる関数などを調べるコマンド
    Page Top

    静的ライブラリと共有ライブラリ anchor.png

    • 静的ライブラリと共有ライブラリの相違点
      • C標準ライブラリの場所
        • 静的ライブラリ /usr/lib/libc.a
        • 共有ライブラリ /usr/lib/libc.so
      • 静的ライブラリ or 共有ライブラリをもちいてコンパイルをした場合の相違
        • ソースファイル(test.cxx)
          #include <iostream> 
          
          int main(){
            printf("Good");
            return 0;
          }
          //標準ライブラリのみを使用
        • 静的ライブラリを用いた場合
          $g++ -o test test.cxx
          $ls -lh test
            -rwxr-xr-x 1 user group 7.8K Jan 16 10:38 test
        • 共有ライブラリを用いた場合
          $g++ -static -o test test.cxx
          $ls -lh test
           -rwxr-xr-x 1 nakamiya quark 1.3M Jan 16 10:38 test
    • 共有ライブラリの依存関係の調査(lddコマンドを用いて)
      • ソース(test2.cxx)の編集
        #include <iostream>
        #include <math.h>
        using namespace std;
        int main(){
          double pi = acos(-1.0);
          cout << "pi is " << pi << endl;
          return 0;
        }
      • コンパイル
        $g++ -o test2 test2.cxx
        • g++のコンパイラだとlibm.soの指定がいらないみたい
          • gccでのコンパイルの場合-lmオプションが必要だった
      • 実行ファイルと依存している共有ライブラリ
        $ldd test2
        linux-vdso.so.1 =>  (0x00007fff443fd000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00000032fd000000)
        libm.so.6 => 	/libm.so.6 (0x00000032f7c00000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00000032fc800000)
        libc.so.6 => /lib64/libc.so.6 (0x00000032f7400000)
        /lib64/ld-linux-x86-64.so.2 (0x00000032f7000000)
      • 共有ライブラリ間の依存
        $ldd /usr/lib/libm.so
         /lib/ld-linux.so.2 (0x009fa000)
         linux-gate.so.1 =>  (0xffffe000)
         libc.so.6 => /lib/libc.so.6 (0x00a19000)
    • マイライブラリの手動生成
      • Func.cxx Unit.cxxを一体化したlibtestライブラリの作成方法
      • 静的ライブラリの手動生成
        $g++ -c Func.cxx Unit.cxx
        $ar crv libtest.a Func.o Unit.o
      • 共有ライブラリの手動生成
        $g++ -shared -fPIC Func.cxx Unit.cxx -o libtest.so
    Page Top

    makefile anchor.png

    • makefileを用いたコンパイル(愚直な例)
      • makefileの中身
        all: main.o Func.o Unit.o
        (タブスペース)g++ -o exec main.o Func.o Unit.o
        main.o: main.cxx Func.h Unit.h
        (タブスペース)g++ -c main.cxx
        Func.o: Func.cxx Func.h
        (タブスペース)g++ -c Func.cxx
        Unit.o: Unit.cxx Unit.h
        (タブスペース)g++ -c Unit.cxx
      • makeコマンドでのコンパイル
        $make all
        g++ -c main.cxx
        g++ -c Func.cxx
        g++ -c Unit.cxx
        g++ -o exec main.o Func.o Unit.o
        実行ファイルexecができた。

    トップ   凍結 差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
    Counter: 913, today: 3, yesterday: 1
    初版日時: 2014-01-16 (木) 11:20:05
    最終更新: 2014-01-16 (木) 11:36:17 (JST) (1771d) by nakamiya