0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

C++でGC(Boehm)を使う準備

C++でGC(Boehm)を使う準備

 C++でGCを使いたい人はたくさんいると思うので下準備のメモ
オープンソースのGCといえばBoehmらしいので早速導入してみます。具体的な流れは、

  1. ソースコードのダウンロード
  2. ソリューションファイルの作成
  3. ビルドして.dllと.libを作成
  4. 使いたいプロジェクトに追加 です。

1.ソースコードのダウンロード

 ダウンロードページから最新のリポジトリをダウンロード。特に理由がなければ「recent stable release」でよし。展開すると中にソースコードが一式入っています。

2.ソリューションファイルの作成

 ソリューションの作成にはCMakeを使います。インストールの仕方は良い記事がたくさんあるのでそちらにお任せ。

 インストールしたらコマンドプロンプトを開いてコマンドをたたく。
cd C:\gc-8.0.4.tar\gc-8.0.4 (プロジェクトの場所に移動)
cmake -D enable_cplusplus=ON (C++用のソリューションファイルの作成)
コマンドが終了するとgc.slnができているはず。

3. ビルドして.dllと.libを作成

 デフォルトのままビルドするとすべてのプロジェクトがコンパイルされる。
作成された、gcmt-dll.dllとgcmt-dll.libを使います。

4. 使いたいプロジェクトに追加

 使いたいプロジェクトを作成し、プロジェクト(P)->プロパティ(E)を開いて先ほどのファイルをプロジェクトに追加する。

  • 構成プロパティ->C/C++の追加 のインクルードディレクトリにincludeフォルダのパスを追記。
    • 例:C:\gc-8.0.4.tar\gc-8.0.4\include
  • 構成プロパティ->リンカー の追加のライブラリディレクトリにgcmt-dll.libの入っているディレクトリを追記。
  • 構成プロパティ->リンカー->入力 の追加の依存ファイルにgcmt-dll.libを追記。
  • 実行時にgcmt-dll.dllが必要になるのでビルドしてexeができる場所などに移動しておく。

5. 試してみる

main.cpp
#include <iostream>
#include <gc_cpp.h>

int ccnt;
int dcnt;

class Hoge : public gc_cleanup
{
public:
  Hoge() {
   ccnt++;
  }
  ~Hoge() {
    dcnt++;
  }
};

int main()
{
  for (int i = 0; i < 100000; i++) {
    Hoge *h = new Hoge();
  }
  std::cout<<"コンストラクタが呼ばれた数:"<<ccnt<<std::endl;
  std::cout<<"デストラクタが呼ばれた数:"<<dcnt<<std::endl;
  return 0;
}

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?