2010-06-23 [長年日記]

[Q3] OpenSSL 1.0.0a

添付しているOpenSSLを1.0.0aに更新しました。Windows CE版は本当にちゃんとビルドできているのか謎です。

OpenSSL 1.0.0aのWindows CE版をVisual Studio 2005でビルド

今までは、eMbedded Visual C++ 3.0でビルドしていたのですが、手に入らなくなってしまったのでVisual Studio 2005でビルドしてみました。

まず、wcecompatをgithubから取得して、新しいバージョンに上げます。素のままでビルドすると、スタックチェック用の関数が見つからずにリンク時にエラーになってしまったので、このパッチを当てます。コンパイルオプションに/GS-を追加しています。

OpenSSL 1.0.0aの方には、このパッチを当てます。コンパイルオプションから/MCを外して/MDと/GS-を追加し、Winsock 2を使うように変更して、必要なライブラリとリンクするようにしています。

後は環境を設定してビルドします。以下の環境変数を設定すれば良いはずです。

set PATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\IDE;%PATH%;C:\Cygwin\bin
set INCLUDE=C:\Program Files (x86)\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Include\Armv4i
set LIB=C:\Program Files (x86)\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Lib\ARMV4I
set OSVERSION=WCE501
set TARGETCPU=ARMV4I
set PLATFORM=Windows Mobile 5.0 Pocket PC SDK
set WCECOMPAT=C:\Users\username\wcecompat

ビルドすると、libeay32.dllのリンク時にエラーになるので、libeay32.defを編集して見つからないシンボル4つを削除します*1。これは、WindowsCE版では、ファイルディスクリプタベースのBIOが実装されていないためです。さらに、capi.dllのビルドでエラーになるので、ビルド対象から外します。CAPIを使うときにANSIベースのAPIを呼び出しているため、UNICODEベースのAPIしかないWindows CEではエラーになってしまいます。

とりあえず、これでlibeay32.dllとssleay32.dllはビルドできます。テストプログラムのビルドでは、またエラーが発生するかもしれません。そして、実機がないのでこれでちゃんと動くのかどうかも怪しいです…

*1  本当は、mkdef.plやlibeay.numあたりへのパッチで何とかできるような気がしますが、面倒なので手作業で


トップ «前の日記(2010-06-17) 最新 次の日記(2010-06-24)»