• D言語とWindows 64bit

    2013年01月09日 00時16分
    dmd 2.061でWindows 64bitがサポートされました。
    しかしビルドするだけでも一苦労だったのでメモっておきます。


    64bitコンパイルオプション

    64bitでビルドするオプションは-m64です。
    dmdのUsageに出てこないので気づきにくいと思います。


    リンカ

    64bitビルドではVCのリンカを使うようになっています。
    よってVCのリンカのパスを設定する必要があり、sc.iniLINKCMD64で指定します。
    私の環境ではMicrosoft Visual Studio 2012 Expressを入れていたので下記のようになりました。
    LINKCMD64=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64\link.exe

    この辺りはご利用の環境に合わせて調整してください。

    参考ですが、私の環境だとlink.exeの実行時にmspdb110.dllが見つからないと言われました。
    mspdb110.dllはC:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDEにあるのですが
    パス設定が面倒なのでlink.exeと同じフォルダにコピーしました。
    訂正: mspdb110.dllをコピーで置いてしまうとVSの動作に影響が出るので、置いてあるフォルダを環境変数PATHに追加します。


    VCINSTALLDIRの設定

    sc.iniに増えた謎の変数VCINSTALLDIRはVCのlibフォルダを参照するための物です。
    VCのlibフォルダにあるCランタイムライブラリ等が必要になるためです。

    もちろんLIB変数にVCのlibフォルダを直接設定しても動くのですが、
    32bit版と混ざるのでVCINSTALLDIRを設定した方がいいでしょう。

    この変数がどう使われるかはdmd2\src\dmd\link.cを見ればわかります。
    1const char *vcinstalldir = getenv("VCINSTALLDIR");
    2if (vcinstalldir)
    3{   cmdbuf.writestring(" \"/LIBPATH:");
    4    cmdbuf.writestring(vcinstalldir);
    5    cmdbuf.writestring("lib\\amd64\"");
    6}

    linkのオプションに/LIBPATH:として指定しています。

    よって私の環境では以下のような設定になりました。
    VCINSTALLDIR=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\

    ※プログラムを見るとわかりますが、最後のバックスラッシュが必須です。


    WindowsSdkDirの設定

    sc.iniに増えたもう一つの謎変数WindowsSdkDirはWindows SDKのlibフォルダを参照するための物です。
    Windows用の各種libが必要になるためです。

    こちらもLIB変数でも指定できますが、VCINSTALLDIRと同じ理由でWindowsSdkDirを設定した方がいいでしょう。

    変数の使われ方についてもVCINSTALLDIRと同じです
    1const char *windowssdkdir = getenv("WindowsSdkDir");
    2if (windowssdkdir)
    3{   cmdbuf.writestring(" \"/LIBPATH:");
    4    cmdbuf.writestring(windowssdkdir);
    5    cmdbuf.writestring("lib\\x64\"");
    6}


    私の環境ではWindows SDK for Windows 7をインストールしてあったので以下のような設定になりました。
    WindowsSdkDir=C:\Program Files\Microsoft SDKs\Windows\v7.1\




    以上で64bit版Windowsのビルドは出来ます。
    ただ、本格的にWindows用プログラムを書こうと思うと
    Windowsモジュールの64bit対応が必要になってくるのでどうしようかと思うわけです。

    コメントを書く

    名前
    本文
    編集用パスワード
    管理者のみ閲覧