2011-06-16 2 views
2

Ocamlで書かれたJavaコンパイラのが動作するはずです。Ocamlで書かれたJavaコンパイラの「リンク中のエラー」

しかし、私はmakeを行うとき、それはエラーで終了:

unzip.o: In function `camlUnzip__59': 
(.data+0x540): undefined reference to `camlzip_deflateEnd' 
unzip.o: In function `camlUnzip__59': 
(.data+0x544): undefined reference to `camlzip_deflate' 
unzip.o: In function `camlUnzip__59': 
(.data+0x548): undefined reference to `camlzip_deflateInit' 
collect2: ld returned 1 exit status 
File "caml_startup", line 1, characters 0-1: 
Error: Error during linking 
make: *** [javacx] Error 2 

「caml_startup」ファイルもフォルダ内に存在しないことが奇妙です。誰でも助けてくれますか?どうもありがとうございました。

+0

著者に連絡してみませんか? –

+0

Ocamlやコンパイラの専門家ではないので、私はそれが簡単かどうかを確認したいと思っています。 – SoftTimur

答えて

4

は、OCamlランタイムの一部です。

プロジェクトのウェブサイトには、かなり古くなったOCaml 3.09で動作することが記載されています。それは3.10(私はまだかなり古く、最新のリリースは3.12)で私のために働いた - たぶん最新のバージョンではうまくいかないかもしれない。

:彼らが呼ばれることはありません、と( unzip.ml内の他の externalルーチンが zlib.cに実装されているのに対し)、実際には実装されていない外部ルーチンを宣言 -

しかし、最初の推測として、私はunzip.mlからこれらの定義を削除するだけでしようとするだろう

external deflate_init: int -> bool -> stream = "camlzip_deflateInit" 
external deflate: 
    stream -> string -> int -> int -> string -> int -> int -> flush_command 
     -> bool * int * int 
    = "camlzip_deflate_bytecode" "camlzip_deflate" 
external deflate_end: stream -> unit = "camlzip_deflateEnd" 
+0

実際、 'deflate'とfriendsは宣言されていますが、定義も使用もされていません。これは3.10までOKでした(リンカーは使用されていないので決してそれらを探しませんでした)が、リンクすることを主張する3.11は、動的にロードされるモジュールによって使用される可能性があるためです。宣言を削除するだけで、 'javajx'を3.11でビルドすれば十分です。 – Gilles

関連する問題