忍者ブログ
すずめと一緒に踊りませんか
ブログ内検索
話題ごと
WirelessFreedom
LinkStation (ls-gl)
イーサネットコンバータ
最新コメント
最新トラックバック
カレンダー
11 2017/12 01
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
バーコード
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

       
京都キャビネットをC++から使ってみようかと思ってみた。
http://fallabs.com/kyotocabinet/

Windows用のバイナリパッケージはあるにはあるのだけれど、
リンク時にLNK4098が出そうだったので、
各種ランタイムに対応した形で、自分でビルドしてみた。

以下、手順メモです。
環境は、以下のような感じ。
 Windows 7 64bit
 Visual Studio (VC++) 2010
上記Webページから、
Source Packages of the core library (C/C++)
ってある場所のソースコードを落とします。
何となく現時点での最新版(1.2.33)にしてみました。

解凍すると、直下にVCmakefileがあります。
このまま
nmake /F VCmakefile
ってやっても(環境によっては)OKなのですが、
静的ライブラリを作成するため、
冒頭で書いたとおり、ランタイムのリンクが使う側のプロジェクトと本ライブラリとで一致していないと、おかしなことになり、リンカが警告を吐いてくれます。
そのため、各種ランタイムに対応したバージョンの静的ライブラリを作ってしまいましょう。

まず、VCmakefileを別名でコピーして、オリジナルを取っておきます。
VCmakefile.newという名前にしましょう。
VCmakefile.newをおもむろにテキストエディタで開きます。

(a)下記を自分の環境に合わせる必要がありそうです。特に、Windows 7 64bitの場合に必須です。(リンカエラーでlibcpmt.libがない、とか言われた場合は、ここのパスが間違っている可能性があります。)
(before)
VCPATH = C:\Program Files\Microsoft Visual Studio 10.0\VC
SDKPATH = C:\Program Files\Microsoft SDKs\Windows\v7.0A

(after(例))
VCPATH = C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC
SDKPATH = C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A


(b)CLFLAGSから/MTを除去します。
(before)
CLFLAGS = /nologo \
/I "$(VCPATH)\Include" /I "$(VCPATH)\PlatformSDK\Include" /I "$(SDKPATH)\Include" \
/I "." \
/DNDEBUG /D_CRT_SECURE_NO_WARNINGS \
/O2 /EHsc /W3 /wd4244 /wd4351 /wd4800 /MT

(after(例))
CLFLAGS = /nologo \
/I "$(VCPATH)\Include" /I "$(VCPATH)\PlatformSDK\Include" /I "$(SDKPATH)\Include" \
/I "." \
/DNDEBUG /D_CRT_SECURE_NO_WARNINGS \
/O2 /EHsc /W3 /wd4244 /wd4351 /wd4800


(c)再帰nmake用のファイル名、及びデフォルトコンパイルオプションを追加します。LINKFLAGSの下あたりが良いかと思います。
MAKEFILENAME = VCmakefile.new
ADDCLFLAGS = /MT


(d)Suffix rulesのコンパイル時のルール定義に、$(ADDCLFLAGS)を追加します。
(before)
.c.obj :
$(CL) /c $(CLFLAGS) $<

.cc.obj :
$(CL) /c $(CLFLAGS) $<

(after(例))
.c.obj :
$(CL) /c $(CLFLAGS) $(ADDCLFLAGS) $<

.cc.obj :
$(CL) /c $(CLFLAGS) $(ADDCLFLAGS) $<


(e)ライブラリをmakeするためのtargetを一つ追加します。
libs : 
set ADDCLFLAGS=/MD
-del *.obj /F /Q > NUL: 2>&1
$(MAKE) /E /F $(MAKEFILENAME) $(LIBRARYFILES)
rename kyotocabinet.lib kyotocabinet-1-2-33-md.lib
set ADDCLFLAGS=/MDd
-del *.obj /F /Q > NUL: 2>&1
$(MAKE) /E /F $(MAKEFILENAME) $(LIBRARYFILES)
rename kyotocabinet.lib kyotocabinet-1-2-33-mdd.lib
set ADDCLFLAGS=/MT
-del *.obj /F /Q > NUL: 2>&1
$(MAKE) /E /F $(MAKEFILENAME) $(LIBRARYFILES)
rename kyotocabinet.lib kyotocabinet-1-2-33-mt.lib
set ADDCLFLAGS=/MTd
-del *.obj /F /Q > NUL: 2>&1
$(MAKE) /E /F $(MAKEFILENAME) $(LIBRARYFILES)
rename kyotocabinet.lib kyotocabinet-1-2-33-mtd.lib
set ADDCLFLAGS=
-del *.obj /F /Q > NUL: 2>&1


以上の編集を完了したら、VCmakefile.newを上書き保存します。

続いて、スタートメニューから「Visual Studio コマンドプロンプト (2010)」を探しだしてきて、起動します。要は、ビルド用にパスを通したコマンドプロンプトなのですけれども。
cd /d C:\path\to\kyotocabinet-1.2.33
で移動してから、以下のコマンドを順に叩きます。
(1) nmake /F VCmakefile.new libs
(2) nmake /F VCmakefile.new all
(3) nmake /F VCmakefile.new binpkg
(4) nmake /F VCmakefile.new check

kcwin32というフォルダが出来上がるので、
これらをVisual Studioから参照パスに追加すれば、使えるはずです。

因みに、(4)を軽い気持ちで始めたら、
延々1時間ぐらいかかった上に、エラーを吐きましたよ。
なんでーー??
PR
       
■ この記事にコメントする
お名前
タイトル
文字色
URL
コメント
パスワード
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
■ コメント一覧
■ この記事のトラックバック
この記事にトラックバックする:
Visual Studioで HOME スマートフォンで読むのに便利
Copyright © すずめのおどりあし All Rights Reserved
Powered by ニンジャブログ  Designed by ピンキー・ローン・ピッグ
忍者ブログ / [PR]