2012年01月25日

GnuTLSのコンパイル&インストール (gnutls-3.0.12以降)

GnuTLSをインストールする前に、Nettleをインストールします。

NettleのインストールにはGMPが必要なので、先にインストールしておいてください。
GMPのコンパイル&インストール


1. Nettleのインストール
Nettle - a low-level cryptographic library
http://www.lysator.liu.se/~nisse/nettle/

このページの、
Download
Get the latest version by http or ftp.
のhttpのリンクから、archiveページに行きます。
http://www.lysator.liu.se/~nisse/archive/
より、
nettle-2.7.1.tar.gz
を、適当なディレクトリに保存します。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xzf nettle-2.7.1.tar.gz
$ cd nettle-2.7.1
$ ./configure --prefix=/mingw --disable-shared --disable-openssl
$ make
$ make install


2. GnuTLSのインストール
The GNU Transport Layer Security Library
http://gnutls.org/
赤いバーのメニューのDownloadから、ダウンロードページに行きます。
http://gnutls.org/download.html

Downloading the GnuTLS libraryのstableから、v3.3ディレクトリを開きます。
ftp://ftp.gnutls.org/gcrypt/gnutls/v3.3/
ここから、
gnutls-3.3.16.tar.xz
を、適当なディレクトリに保存します。

2013/07/21 追記
configureの後、pkg-config用のファイル「lib/gnutls.pc」の「Libs.private:」項目に、
-lcrypt32
を追加するようにしました。

MSYSで、ファイルを保存したディレクトリに移動し、
$ tar xJf gnutls-3.3.16.tar.xz
$ cd gnutls-3.3.16
$ ./configure --prefix=/mingw --disable-shared --disable-cxx --disable-openssl-compatibility --disable-doc --disable-gtk-doc-html --with-included-libtasn1 --without-p11-kit
$ sed -i.orig -e "/Libs.private:/s/$/ -lcrypt32/" lib/gnutls.pc
$ make
$ make install

2014/02/02 追記
念のため、make checkして、エラーが出なければOKです。
make checkの結果、以下のログにFAILが8個ありました。
gl/tests/test-suite.log
今のところ、原因不明です。

以上で終了です。


【補足】
拡張子が.xzのファイルは、GNU tar 1.22以降で解凍できます。
GNU tar 1.22以降をインストールするか、または、7-ZipなどのGUIツールで解答してください。

2012/11/02 追記
gnutls-3.1.3から、src/serv.c で以下のようなエラーが出るようになりました。

serv.c: In function 'cmd_parser':
serv.c:1668:1: error: pasting "INDEX_OPT_" and "(" does not give a valid preprocessing token
serv.c:1668:3: warning: implicit declaration of function 'INDEX_OPT_' [-Wimplicit-function-declaration]
serv.c:1669:1: error: pasting "INDEX_OPT_" and "(" does not give a valid preprocessing token

これは、「/mingw/include/wincrypt.h」で定義されている「OCSP_RESPONSE」と同じキーワードを、エラーの所で使用しているのが原因でした。
そのため、エラーが出る所の直前で、

#ifdef _WIN32
#undef OCSP_RESPONSE
#endif

としています。

2013/05/11 追記
src/serv.c のパッチは、gnutls-3.1.11以降では不要です。

【更新履歴】を見る
posted by あべちん at 19:22 | Comment(10) | TrackBack(0) | FFmpeg追加ライブラリ
この記事へのコメント
GMP,Nettleのインストールを完了させGnuTLSをmakeしたのですが、
このようなErrorが出てしまいます。(クロスコンパイル環境のx86でmake)
http://privatepaste.com/0ccc3a5ce0

色々と調べて二週間(瀑
解決できませんでした。
環境が違うのでなんとも言えないと思いますが、お気づきの点が御座いましたら宜しくお願いします。

XhmikosR's builds
http://xhmikosr.1f0.de/tools/
Posted by X5-452 at 2012年10月29日 15:33
X5-452さん

> 色々と調べて二週間(瀑
お疲れさまです…

src/serv.c の1668行目からたどってみると、
HAVE_OPT(OCSP_RESPONSE)
が、src/serv-args.h 119行目で
(! UNUSED_OPT(& DESC(OCSP_RESPONSE)))
になり、同じく118行目で
(! UNUSED_OPT(& (gnutls_servOptions.pOptDesc[INDEX_OPT_OCSP_RESPONSE)))
になるということでしょうか。

src/serv-args.h 118行目の
[INDEX_OPT_## n]
あたりがあやしそうな感じですが、エラーが再現できないので分かりません。
##とnの間のスペースを削除してみるとかはいかがでしょう?
Posted by あべちん at 2012年10月29日 19:17
##とnの間のスペースを削除してみましたが前と全く同じErrorでした。

三週間目まで頑張ってゴニョゴニョしてみますw

お付き合い有難う御座いました。
Posted by X5-452 at 2012年10月29日 22:24
X5-452さん

ググっても同じエラーが見つからないし、謎ですね。
また何か分かりましたら追記します。
Posted by あべちん at 2012年10月30日 20:47
僕も、かなりググってはみましたが同じようなエラーが見つかりませんでした。
NettleやGnuTLSのVersionを下げてみたりしてトライしてみます。

有難う御座いました。
Posted by X5-452 at 2012年10月31日 16:53
X5-452さんこんにちは。管理人です。

その後何か進展はありましたでしょうか?

同じマクロが使われていても、src/serv.c の1668、1669行目だけエラーになるのは何でだろう?と目を皿のようにしてソースを眺めていたら、
HAVE_OPTとOPT_ARGの後の左カッコの間にスペースが有るか無いかの違いでした。

そんなことでエラーになるのか分かりませんが、とりあえずご参考まで。
Posted by あべちん at 2012年11月01日 19:18
src/serv.cの修正でも同じerrorでした。
試しにsrc/serv-args.h + src/serv.cの修正も試しましたが同じでした。

一応、error-log置いておきますね。
http://sada5.sakura.ne.jp/GnuTLS-Error-Log.rar
Posted by X5-452 at 2012年11月02日 14:08
X5-452さん

たびたびすみません。
よく見たら、私の環境でもsrc/serv.c の同じところでエラーになってました。チーン

結局、
OCSP_RESPONSE
というマクロが、/mingw/include/wincrypt.h で定義されているのが原因でした。

src/serv.c 1668行目から、

#ifdef _WIN32
#undef OCSP_RESPONSE
#endif

if (HAVE_OPT(OCSP_RESPONSE))
status_response_ocsp = OPT_ARG(OCSP_RESPONSE);

とすればOKです。
Posted by あべちん at 2012年11月02日 22:24
makeできました〜ぁ
数週間の悩みが吹っ飛びましたw

色々とErrorの原因を調べてたら、libtasn1-2.14を入れないと旧版が入ってしまうと言う記事を見ました。(URL控えてませんでした)

polarssl,openssl,GnuTLSをmakeして思ったのですが、polarssl一番いいw

色々と有難う御座いました。
Posted by X5-452 at 2012年11月03日 02:05
X5-452さんこんにちは。管理人です。

やっぱり、polarsslが一番いいですね。
ffmpegでも、gnutlsかopensslが必要なところを、polarsslも選択できるようになるといいんですけど。

libtasn1は、時間がある時に試してみます。

ありがとうございました。
Posted by あべちん at 2012年11月04日 14:04
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/53299801
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック