1

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)

4

1 に答える 1

2

ここでの問題は、Dialyzer を間違った分析に使用している可能性があります。dialyzer は、モジュール (絶対名で参照する必要があります) に加えて、アプリケーションがビルドする標準ライブラリを分析するために使用されます。

そのため、理想的な環境ではdialyzer --build_plt --apps erts kernel stdlib、最初に Persistent Lookup Table を作成するために次のように入力する必要があります。次に、 を使用してアプリケーションを dyalizer PLT ファイルに追加できますdialyzer --add_to_plt

ところで、モジュールで dyalizer を直接使用する場合は、.erl ソース ファイルではなく、.beam コンパイル済みファイルを提供する必要があります。

于 2012-05-22T14:38:55.950 に答える