Ubuntu 11.10 で glpkerl ライブラリをコンパイルしようとしていますが、これまでのところ成功していません。
ずっとエラーが発生しているので、見逃している重要なものがあるかもしれません:
私が試したこと
インストールされている Erlang のバージョンは R14B02 です (ディストリビューションの公式 apt リポジトリからインストールされます)。
私の glpk バージョンは公式レポで新しいので、ここから glpk-4.38 をダウンロードしました: http://ftp.gnu.org/gnu/glpk/。このバージョンの glpk をシステム全体にインストールしたくないので、ディレクトリ ~/opt を作成し、インストールするすべてのライブラリのルートとして次の手順で使用します。
export MY_PREFIX=$HOME/opt
mkdir $MY_PREFIX
cd /tmp
curl http://ftp.gnu.org/gnu/glpk/glpk-4.38.tar.gz | tar zx
cd glpk-3.48 && ./configure --prefix=$MY_PREFIX && make -s && make -s install
次に、glpkerldrv をダウンロードしてインストールを試みます。
cd /tmp
curl http://glpkerl.googlecode.com/files/glpkerldrv-4.38.0.tar.gz | tar xz
cd glpkerldrv-4.38.0
./configure --prefix=$MY_PREFIX LDFLAGS="-L$MY_PREFIX/lib" CPPFLAGS="-I$MY_PREFIX/include"
make -s
make の使用中に何か問題が発生したようです。glpkerl インストール wiki に記載されているように、configure 中に --disable-hardcore を使用して、コンパイラの警告からエラーへの変換を無効にしました。ただし、それでも、次の宣言されていない識別子エラーは依然として残っています。
handlers.c: In function decode_from:
handlers.c:3310:29: error: INT_MAX undeclared (first use in this function)
handlers.c:3310:29: note: each undeclared identifier is reported only once for each function it appears in
どうやら、handlers.c ファイルを生成する perl スクリプトには、limits.h も含まれているはずです。以下を追加して修正しました(Cの経験がないため、これが正しい方法であるかどうかはわかりません):
--- a/src/make-handlers
+++ b/src/make-handlers
@@ -52,6 +52,10 @@
my ($name, $values) = @_;
print <<EOD;
+#include <limits.h>
+EOD
+
+ print <<EOD;
#define deserialize_$name(buf, buflen) \\
({ \\
uint8_t byte; \\
これで、ビルドが機能し (--disable-hardcore
警告は無視されるべきではないと思いますが、添付ファイルを参照してください)、make、make check、および make install を実行できます。
しかし、私は2番目の部分で立ち往生しています:
cd /tmp
curl http://glpkerl.googlecode.com/files/glpkerl-4.38.0.tar.gz | tar xz
cd glpkerl-4.38.0/
./configure --prefix=$MY_PREFIX LDFLAGS="-L$MY_PREFIX/lib" CPPFLAGS="-I$MY_PREFIX/include"
PKG_CONFIG_PATH=$MY_PREFIX/lib/pkgconfig make -s
PKG_CONFIG_PATH=$MY_PREFIX/lib/pkgconfig make -s check
ビルドは正常に動作しているように見えますが、ダイアライザー エラーのためにチェックが失敗します。
dialyzer: Could not find the PLT: /home/my_user/.dialyzer_plt
どうやら、DIALYZERFLAGS を makefile に渡すことができます。
DIALYZERFLAGS="--build_plt" PKG_CONFIG_PATH=$MY_PREFIX/lib/pkgconfig make -s check
そして、ここで私はどのように進めるかわからないところです
最後のコマンドを実行した後、次のエラーが表示されます。
dialyzer: {dialyzer_error,"Byte code compiled with debug_info is needed to build the PLT"}
奇妙なことは、+debug_info パラメータが明らかに erlang コンパイラに渡されていることです (Makefile.opt ファイルにあるようです)。
現在の環境でこれを解決する方法がまったくわからないため、これ以上の調査をやめました。ここで明らかな何かが欠けていますか?ありがとう!
(タグ: erlang glpk glpkerl)