読者です 読者をやめる 読者になる 読者になる

Boost.ContextをVC10でビルドして動かした

C++

私はbjamというよくわからないビルドツールを使ってないので、普段はVC環境であればBoostのソースファイルをプロジェクトに入れて自動リンクを切って使っています。


先日trunkに入ったBoost.Contextもそんな感じでいけるかと思ったのですが、asmファイルがあってうまくいかなかったので、それだけビルドしてリンクすることにしました。
VCでどうやってasmファイルをビルドすればいいのかわからなかったので調べたら以下のページに書いてありました:

アセンブル&リンクの基礎


Boostの/libs/context/src/asm にあるWindows環境用のasmファイルを持ってきて、コマンドラインで以下を実行したら、デバッグ版のobjファイルができました。

ml /c /Zi fcontext_i386_ms_pe_masm.asm

あとはこれを、VC上のプロジェクトプロパティからリンクするファイルに追加してサンプルコードをビルド。

// libs/context/example/enumerator/enumerate_string.cpp
#include <cstdlib>
#include <iostream>
#include <string>

#include "enumerator.h"

class string_enumerator : public enumerator<char> {
    void enumerate()
    {
        const char * c(str_.c_str());
        while ('\0' != * c) {
            const char tmp(*c);
            yield_return(tmp);
            ++c;
        }
    }

    std::string const& str_;

public:
    string_enumerator(std::string const& str) :
        str_(str)
    {}
};

int main(int argc, char * argv[])
{
    {
        std::string str("Hello World!");
        string_enumerator se(str);
        char tmp;
        while (se.get(tmp)) {
            std::cout << tmp <<  " ";
        }
    }

    std::cout << "\nDone" << std::endl;

    return EXIT_SUCCESS;
}
H e l l o   W o r l d !
Done

動きました!
GCCで動かす必要が出てきたら別途調べます。