いけむランド

はてダからやってきました

cygport で debuggable な DLL をビルドする方法

cygport でデバッグ可能なバイナリをビルドする場合には

ことが必要となる。

デバッグ情報を埋め込む

これは gccコンパイルオプションに -g を追加しておけば良い。cygport ファイルだと configure のオプションに渡すようにするのが手っ取り早い。

CYGCONF_ARGS="CFLAGS=-g"

ストリップしない

cygwin 本家で配布されている cygport-0.2.10 では必ず strip されるようになっているため、Cygwin Ports で配布している cygport-0.3.7 を使う必要がある。

上記のバージョンを使い、cygport ファイルに _CYGPORT_RESTRICT_strip_ を定義しておけば、パッケージに含まれるすべての *.exe および *.dll が strip されない。

__prepstrip() {
        if defined _CYGPORT_RESTRICT_strip_
        then
                inform "Skipping strip step per request.";
                return 0;
        fi

        local exe;

        cd ${D};

        echo "Stripping executables:";

        # Ruby and Apache2 modules should be *.so, nothing else!!!
        for exe in $(find * -type f -name '*.dll' -o -name '*.exe' -o -name '*.so')
        do
                # Mono assemblies must not be stripped!
                if [ -w ${exe} ] && ! objdump -p ${exe} | grep -q "DLL Name: mscoree.dll"
                then
                        echo "        ${exe}";
                        chmod +x ${exe};
                        strip ${exe};
                fi
        done
}