環境構築・零

環境構築のその先へ

日めくり多様な機能

github.com

過去にWeb用として、日めくりというRubyGemsを作りました。

rubygems.org

これをC#Javaで出力結果を同じように作ってみました。

ちまたでは「○○チャレンジ」というのが流行っていたこともありました。

「日めくりチャレンジ」と名付けます。

シンプルではありますが、日数計算の記事はあまり見かけません。

オンラインで参考になる記事を探すことも大事ですが、

見かけない記事を書くことも醍醐味ではあります。

GitHubを活用して、自分だけのチャレンジを探してみるのもいいかもしれません。

dotnetでGitHubパッケージに登録するには

help.github.com

gist.github.com

dotnetGitHubパッケージに登録する際に時間がかかりました。

オンライン記事をみているとNugetに登録してしまう例もあるようです。

dotnetでプロジェクトを作成(省略)後、

csprojに引用サイト通り設定を追加、

プロジェクトcsproj直下にgistにあるnuget.configを設置します。

GitHub_USERNAMEには自分のアカウント名を私の場合takkiiを。

GitHub_TOKENには、GitHubで発行できるトークンを。

RubyGitHubパッケージに登録するときのトークンと同じです。

echo ":github: Bearer GH_TOKEN" >> ~/.gem/credentials

見覚えがあるはずです。なかったらぐぐりましょう。

※ いくつか説明を見つけることができます。

GH_TOKENがdotnetでも使うGitHub_TOKENになります。

dotnet pack --configuration Release

dotnet nuget push "bin/Release/プロジェクト名.1.0.0.nupkg" --source "github"

これで登録されます。使ってみませんか。

valgrindをMacOSCatalina(カタリナ)でビルドする。

MacOSCatalina 64bit

※ 当然、Xcode&commandlinetoolsのビルド対象も64bitです。

Xcode&commandlinetoolsはAppStoreまたはシステム環境設定→ソフトウェアのアップデートやAppleDeveloplerのサイトから、手に入れます。Xcodeなどを入れる環境構築の話題は省略します。

stackoverflow.com

github.com

※ビルドできませんでした。

× git://sourceware.org/git/valgrind.git

GitHubのこちらがビルドできました。

git clone https://github.com/sowson/valgrind

cd valgrind

./autogen.sh

valgrind/coregrind/Makefile内、153行目付近にあるam_append_19を置換

am__append_19 = \ 
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach/mach_vm.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach/task.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach/thread_act.defs \
        /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/mach/vm_map.defs

※ ビルド時の指定は64bitビルドのためです。

./configure --prefix=/where/you/want/it/installed --enable-only64bit

make

これでカタリナでビルドが通ります。

ビルド中、もしPerlでuseがno found commandなどになった場合、/usr/bin/perlを指定します。場合に応じて、cpanでlocal::libをインストールして、cpanがなければ入れます。ちょっと試すときvalgrind/coregrind内でmakeを実行することも考慮します。

QtCreatorでvalgrindとcallgrindを設定することができるようになります。

C++を覚えるとき、メモリリークを回避するためにガーベッジコレクション(GC)を導入したいと思うようになりました。MacGCが導入できるC++IDEを探しているとなじみの深いQtCreatorがおすすめの記事が海外でありました。communityeditonを使おうとしたときに、遭遇し解決したビルド例です。私のMBAのマシン性能はあまりに弱いため、valgrindが終了を返すのに時間がかかり本体に熱を持ち始め諦めましたが、我こそはという人がvalgrindを使い終了できるか試すのもよいのではないでしょうか。結果論ですが、homebrewは対応していなくてもPATHを通せばビルドできます。

今年もありがとうございました。来年もよろしくお願いします。

C++は機械に近い、人間力は道具を使うこと。

追記

vim8.1 · GitHub

下の方のEmacsビルドでMacのビルドツールを設定するコマンドも参照するといいかもしれない。

valgrind install path [ $HOME/valgrind (例) ]

export PATH=$HOME/valgrind/coregrind:$PATH
export PATH=$HOME/valgrind/callgrind:$PATH
export CPPFLAGS="$HOME/valgrind/include"

※ このように設定するのもよいかもしれない。

ガーベッジコレクションを導入するときのまとめ

前提、メモリリークすることがあると懸念されるとします。

それが発生したとき発動するかもしれないガーベッジコレクションを用意したいとします。

そんなときの記録。

ほとんどは参考サイト通りです。

github.com

※ ライセンス

github.com

https://www.hboehm.info/gc/license.txt

[ 2019/12/16 ]

bdwgcをcmakeでビルドする環境は、

8.0.4 は visual studio 2019対象

7.6.12はvisual stuido 2017対象

ビルドしてみてわかりました。

github.com

※ ライセンス

github.com

これもcmakeビルドする際に含まないといけないプロジェクトですが、最新でも通りました。

参考サイトの記事中にこんな記述があります

includeパスに、bdwgc/include のパスを通す。
libパスに、gcmt-dll.libの場所を追加する。
依存するライブラリに、gcmt-dll.libを追加する。
gcmt-dll.dllをコピーする。

visual studio 2017で設定してみました。

Debugとしてビルドしたbdwgcをプロジェクト内(例えばhello)に入れます。

hello/bdwgcと仮にします。

プロジェクト名で右クリック→プロパティ

C/C++全般→追加のインクルードディレクトリ→$(SolutionDir)\bdwgc\include

リンカー→全般→$(SolutionDir)\bdwgc\Debug

入力→追加の依存ファイル→(先頭に追加)gcmt-dll.lib;gcmt-lib.lib;kernel32.lib...と続きます。

bdwgc/Debug/gdmt-dll.dllを例 hello/hello/Debug(visualstudioビルド後に作成したフォルダ)にコピーします。

これで参考サイトC言語でGarvage Collectorを使う記事のソースがコンパイル&ビルドできます。

一例ですが、ガーベッジコレクションC/C++プロジェクトに導入してみませんか。

おそらくメモリリークは、回避できるはずです。

環境構築をすることでその先の知らない世界まで、道に迷わないように。

参考サイト

www.excellence-blog.com

corgi-lab.com

teratail.com

[ C++サンプル ]

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

class stand final : public gc_cleanup
{
public:
    enum {
        n = 100,
        n123 = 123,
    };
};

int main()
{
    try {
        std::cout << stand::n << "\n";
        std::cout << stand::n123 << "\n";
    }
    catch (std::exception& e)
    {
        std::cout << e.what() << std::endl;
    }
}

出力結果

100
123

公開されました。

今年はこれでアドベントカレンダー記事は終わりです。

ありがとうございました。

C++Builderのcommunityediton、ライセンス期間。

f:id:emerald00:20191109092324p:plain

私の場合は、2020/7月まで有効。

※ この間までサーバダウンしていてダウンロードできなかったので期間は少し減っている。

www.embarcadero.com

www.embarcadero.com

正式公開前、フライング限定公開。

qiita.com

qiita.com

qiita.com

qiita.com

アドベントカレンダーの公開前記事です。

修正したり、加筆することもあります。

できれば、もう少しコーディングを追加したいなぁ。

Copyright © 2007-2019 Takayuki Kamiyama. All Rights Reserved.