Qtで使うOpenSSL のビルドについて

参號です。

最近T-semi部内でQtを使い始めようかなという人が増えてきました。
私もその一人で趣味として某艦隊シミュレーションゲーム、艦隊こ○くしょんの専用ブラウザを作ったりして楽しんでいます。

LinuxユーザやMacユーザならサンプル(あったかな?)どおりに進めていけばWebブラウザは簡単に作れて機能制限こそあるものの簡易的なブラウザとして利用することが出来ます。
が、Windowsユーザはそうはいきません。
というのも、自分でOpenSSLをビルドするか、配布しているバイナリ入手し、アプリケーションが参照できるところに 配置しないとhttps://hogehuga.piyo/のようにhttpsのリンクにアクセスした場合
QSslSocket: cannot call unresolved function SSLv23_client_method
QSslSocket: cannot call unresolved function SSL_CTX_new
QSslSocket: cannot call unresolved function SSL_library_init
QSslSocket: cannot call unresolved function ERR_get_error
QSslSocket: cannot call unresolved function ERR_get_error
この様に怒られて接続が出来なくなります。

それじゃあどうすればいいんだ!という感じですが、先にも述べたように
①自分でソースからビルド
②バイナリを入手する
この2つの選択肢があります。

ここでは①のソースからビルドを例にとって行っていきたいと思います。
これはこれからQtを触り始める同輩や後輩に向けて再度説明が必要ないようにという感じの覚書のようなものなので、過度な期待はしないでください。

今回使った環境は
Qt 5.2.* for Windows 32-bit MinGW OpenGL
MinGW

VS版をこのサークルで使っている人が自分の知っている中ではいなかったのでMinGW版を対象に進めていきます。

最初にはっきり言ってしまえば、
https://qt-project.org/wiki/Compiling-OpenSSL-with-MinGW
このページを参考にすれば特に問題なくビルドが終わってしまいます。
以上。

というわけにもいきませんね、ちょっと噛み砕いて説明いたしましょう。

ユーザーが別途インストールを要求されているのは、
MSYSを入れたMinGW
ActivePerl等のPerlの環境
です。
私はActivePerlにしました(他の物を知らなかったため)。

次にOpenSSLのソースを落として展開しましょう。
HeartBleedの問題があったので、なるべく新しいものを推奨。

Qtのページに書かれている通りにConfigureしましょう。
./Configure –prefix=$PWD/dist no-idea no-mdc2 no-rc5 shared mingw
$PWD/distの部分は好きに書き換えてください。
私はC:/OpenSSL/MinGWの様にしました。

Configureが完了するとMakefileが生成されます。
それでは早速make…というわけにもいきません、ちょっとMakefileを書き換えます。
まず1つ目としてPerlをインストールしたディレクトリを指定します。
PERL= c:/Perl64/bin/perl.exe
みたいにとりあえず絶対参照しておけば問題ないんじゃないでしょうか。念のため私はPATHも通しました。
2つ目として、testをさせないようにします。
というのも、このままmakeするとtestでエラーをはいて止まってしまうのです。
http://cat-in-136.blogspot.jp/2010/03/mingw32undefined-reference-to-winmain16.html
ここに原因らしきことが書いてありました、たぶんこれじゃないでしょうか?
ですのでMakefileの
build_all: build_libs build_apps build_tests build_tools

build_all: build_libs build_apps build_tools
の様にtestsを消し去りましょう、たぶん問題ないです。
最後に、
install: all install_docs install_sw

install: all install_sw
と書き換えちゃいましょう。
みなさん、どうせman読まないでしょ?

以上の準備が済んだら
make depends
make
make install
これでOpenSSLのビルドは完了。
prefixで指定したフォルダにいろいろと入っていると思います。
Webブラウザで使うのは
ssleay32.dll,libeay32.dll
だけだと思うので、それをアプリケーションが参照できる位置に配置すれば動作すると思います。
私は動作しました。

最初OpenSSL内にある何とか.W32の様なファイルを見てビルドしていたのですが、どうもできずにつまづいていました。
Qtで使うことを限定した場合結構例が載っていて非常に助かりました。
同じようなことで無駄な時間を費やす人が減れば私も嬉しいです。

次は要望のあったQtとOpenCVの連携及び簡単なサンプルコードも載せましょうかね…レポートの地獄から解放されたらの話ですが()

Qtで使うOpenSSL のビルドについて」への1件のコメント

田中大智 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です