はじめに
GitHubのOpenSCのソースからビルドした時のメモ。
公式サイトの Compiling on Windows を実施したときのメモです。
環境
- OS=Windows10
OpenSCとは
先にインストールしとく必要があるもの
公式サイトで Build Requirements と Build Configuration の前半に書いてあること。
※Edit Make.rules.makと書いてあって、手動でこのファイルを修正する必要があるように思えるが、とりあえず、この時点では修正する必要はなかった。(最後のステップで修正が必要)
- Microsoft’s Cryptographic Provider Development Kit
- cngsdk.msi をダウンロード
- cngsdk.msi を実行してインストール
- WiX Toolset
- http://wixtoolset.org/
- V3.11.1 → wix311.exe をダウンロードしてインストール
上記以外に必要なもの。
- Visual Studio 2015
- 2015 である必要はないと思うがVisual Studioが必要
- サクラエディタ
- 文字コードが原因でコンパイルエラーが出るので、その修正用
- http://sakura-editor.sourceforge.net/download.html
- sakura_install2-2-0-1.exe (2.2.0.1)
- MSYS2
- http://www.msys2.org/
- msys2-x86_64-20161025.exe をダウンロードしてインストール
- MSYS2 のコマンドいろいろ
- MSYS2 インストールして Windowsのメニューから MSYS2 MinGW 64-bit(コンソール) を起動
- コンソールから pacman コマンドを使ってインストールする。以下のコマンド。
- 実行するコマンド① →
pacman -S base-devel
- 実行するコマンド② →
pacman -S msys2-devel
- これで autoconf,automake,libtool,make,gcc,pkg-config あたりは全部使えるようになる。
:pacmanメモ
ローカルにインストールされたソフトウェアの検索には-Qsオプションを使います。
pacman -Qs [検索したいソフトウェアパッケージ名]
より詳細を知りたい場合は-Qiオプションを使います。
pacman -Qi [検索したいソフトウェアパッケージ名]
更に詳細を表示したい場合はiを増やします。
pacman -Qii [検索したいソフトウェアパッケージ名]
ここからがビルド
公式サイト Build Configuration の真ん中あたりから
- Windowsのメニューから MSYS2 MinGW 64-bit(コンソール) を起動し、以下のコマンドを順番に実行していく
- Clone(またはダウンロード)した OpenSCフォルダ に移動してから実行すること
autoreconf -i
MSYS2コンソール
$ autoreconf -i
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
libtoolize: Remember to add 'LT_INIT' to configure.ac.
configure.ac:58: installing './compile'
configure.ac:57: installing './config.guess'
configure.ac:57: installing './config.sub'
configure.ac:28: installing './install-sh'
configure.ac:28: installing './missing'
src/common/Makefile.am: installing './depcomp'
※これでOK
./configure --disable-openssl --disable-readline --disable-zlib
MSYS2コンソール
$ ./configure --disable-openssl --disable-readline --disable-zlib
configure: loading site script /mingw64/etc/config.site
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
・・・
config.status: creating MacOSX/resources/Welcome.html
config.status: creating config.h
config.status: executing depfiles commands
※これでOK
make -C etc opensc.conf
MSYS2コンソール
$ make -C etc opensc.conf
make: ディレクトリ '.../github/opensc/etc' に入ります
make: ディレクトリ '.../github/opensc/etc' から出ます
※これでOK
cp win32/winconfig.h config.h
MSYS2コンソール
$ cp win32/winconfig.h config.h
※これでOK
MSYSコンソールでの作業はここまで。
注意:公式サイト Manually Creating Built Source Filesにかいてあることはやってはいけない。makeでエラーになる。(ちゃんと英語を読めばわかるのかも)
やっちゃいけない
copy win32\winconfig.h.in win32\winconfig.h
copy src\minidriver\versioninfo-minidriver.rc.in src\minidriver\versioninfo-minidriver.rc
copy src\pkcs11\versioninfo-pkcs11.rc.in src\pkcs11\versioninfo-pkcs11.rc
copy src\pkcs11\versioninfo-pkcs11-spy.rc.in src\pkcs11\versioninfo-pkcs11-spy.rc
copy src\tools\versioninfo-tools.rc.in src\tools\versioninfo-tools.rc
copy win32\OpenSC.wxs.in win32\OpenSC.wxs
copy win32\versioninfo-customactions.rc.in win32\versioninfo-customactions.rc
copy win32\versioninfo.rc.in win32\versioninfo.rc
copy win32\winconfig.h.in win32\winconfig.h
やっとMake
公式サイト Build OpenSC のところ
さらっと書いてあるが、一番大変。
- Windowsのメニューから 開発者コマンド プロンプト for VS2015 を起動し、コマンドを実行していく
- Clone(またはダウンロード)した OpenSCフォルダ に移動してから実行すること
nmake /f Makefile.mak
VisualStudio開発者コマンドプロンプトでnmake
C:\GitHub\OpenSC>nmake /f Makefile.mak
Microsoft(R) Program Maintenance Utility Version 14.00.24210.0
Copyright (C) Microsoft Corporation. All rights reserved.
copy /y winconfig.h config.h
1 個のファイルをコピーしました。
rc /l 0x0409 versioninfo-customactions.rc
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation. All rights reserved.
cl /O1 /GS /W3 /WX /D_CRT_SECURE_NO_DEPRECATE /D_CRT_NONSTDC_NO_WARNINGS /MT /nologo /DHAVE_CONFIG_H /I..\..\win32 /I..\..\src "/IC:\Program Files (x86)\Microsoft CNG Development Kit\Include" "/IC:\Program Files (x86)\WiX Toolset v3.11\\SDK\VS2015\inc" /DWINVER=0x0601 /D_WIN32_WINNT=0x0601 /DWIN32_LEAN_AND_MEAN /DENABLE_MINIDRIVER /DENABLE_SM /DOPENSC_FEATURES="\"pcsc\"" /Zi /c compat_getpass.c compat_getopt.c compat_strlcpy.c compat_strlcat.c simclist.c compat_report_rangecheckfailure.c compat___iob_func.c
C:\GitHub\OpenSC\src\libopensc/opensc.h(846): error C2220: 警告をエラーとして扱いました。'object' ファイルは生成されません。
C:\GitHub\OpenSC\src\libopensc/opensc.h(846): warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
こんな感じのエラーが山ほど出る。
error C2220 と warning C4819 のエラーが山ほど出るので、一つ一つ修正していく必要がある。
- エラーとなったファイルをサクラエディタで開く(上記例では opensc.h)
- 文字コードをUTF-8(BOM付き)に変更する。
- サクラエディタで「名前を付けて保存→文字コードセット=UTF-8 , BOMのチェックをON にして上書き保存。
- 参考になったサイト
文字コードを変更して、nmake /f Makefile.mak
VisualStudio開発者コマンドプロンプトでnmake
C:\GitHub\OpenSC>nmake /f Makefile.mak
lib /nologo /machine: /out:common.lib compat_getpass.obj compat_getopt.obj compat_strlcpy.obj compat_strlcat.obj simclist.obj compat_report_rangecheckfailure.obj compat___iob_func.obj
LINK : fatal error LNK1146: オプション '/machine:' の引数が指定されていません。
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\lib.EXE"' : リターン コード '0x47a'
Stop.
今度はこんな感じのエラーが山ほど出る。
LNK1146: オプション '/machine:' というエラーが出る。
これは環境によるものかもしれません。原因不明だが、win32\Make.rules.mak を修正する必要があるようだ
Make.rules.mak
OPENSC_FEATURES = pcsc
# ↓この行を追加
PLATFORM = x86
# Include support for minidriver
MINIDRIVER_DEF = /DENABLE_MINIDRIVER
ちなみに PLATFORM = x64
だと、また変なエラーが出てしまうのでx86にした。(もう疲れた)
PLATFORM=x64にするとこんなエラー
fatal error LNK1112: モジュールのコンピューターの種類 'X86' は対象コンピューターの種類 'x64' と競合しています。
これで何度目かのnmakeでやっとエラーなしとなった。
ビルドでできるもの
C:\GitHub\OpenSC>dir *.dll *.exe /S
C:\GitHub\OpenSC\src\libopensc のディレクトリ
2018/04/28 17:33 989,184 opensc.dll
1 個のファイル 989,184 バイト
C:\GitHub\OpenSC\src\minidriver のディレクトリ
2018/04/28 17:34 1,046,016 opensc-minidriver.dll
1 個のファイル 1,046,016 バイト
C:\GitHub\OpenSC\src\pkcs11 のディレクトリ
2018/04/28 17:33 832,512 onepin-opensc-pkcs11.dll
2018/04/28 17:33 832,512 opensc-pkcs11.dll
2018/04/28 17:33 150,016 pkcs11-spy.dll
3 個のファイル 1,815,040 バイト
C:\GitHub\OpenSC\src\tests のディレクトリ
2018/04/28 17:34 112,128 base64.exe
2018/04/28 17:34 129,536 p15dump.exe
2018/04/28 17:34 118,784 pintest.exe
3 個のファイル 360,448 バイト
C:\GitHub\OpenSC\src\tools のディレクトリ
2018/04/28 17:33 123,904 cardos-tool.exe
2018/04/28 17:34 111,104 egk-tool.exe
2018/04/28 17:33 127,488 eidenv.exe
2018/04/28 17:33 118,784 iasecc-tool.exe
2018/04/28 17:33 142,336 openpgp-tool.exe
2018/04/28 17:34 112,640 opensc-asn1.exe
2018/04/28 17:33 178,176 opensc-explorer.exe
2018/04/28 17:34 156,672 opensc-notify.exe
2018/04/28 17:33 143,360 opensc-tool.exe
2018/04/28 17:33 220,672 pkcs11-tool.exe
2018/04/28 17:33 136,192 pkcs15-crypt.exe
2018/04/28 17:33 176,128 pkcs15-tool.exe
12 個のファイル 1,747,456 バイト
C:\GitHub\OpenSC\win32 のディレクトリ
2018/04/28 17:34 135,680 customactions.dll
1 個のファイル 135,680 バイト
ファイルの総数:
21 個のファイル 6,093,824 バイト
win32フォルダでnmake /f Makefile.mak OpenSC.msi
開発者コマンドプロンプトでnmake
C:\GitHub\OpenSC>cd win32
C:\GitHub\OpenSC>nmake /f Makefile.mak OpenSC.msi
なんだかんだログがでて OpenSC.msi ができて終了