2011年8月31日水曜日

Cygwinビルドで解決へ…

Cygwinでビルドしたら、日本語・全角ファイル名を受け付けるモノができてしまいました。

Windows用バイナリを一時的にこちらで配布中。

Cygwin導入時の注意点:
  • gcc, gcc-core, gcc-g++, gcc-javaの4つをを含めるようにします。
  • これらは Devel グループに在ります。
  • 版は必ず3.4.4-3にします。3.4.4-999にしますと確かビルドに失敗します。
Cygwin1.dllのバージョンについて:
  • バージョンによっては一部の日本語文字や、ダブルクォーテーションを受け付けません。
  • cygwin1.dllが1.7.9の物はOKでした。
  • cygwin1.dllが1.7.10又は1.7.11の物はNGです。
  • cygwin1.dllが1.7.12の物はOKです。
ビルド時の注意点:
  • pdftk\Makefile.Windowsを手直しします。
    • export LDLIBS= c:/mingw-3.4.5/lib/crt2.o -nostdlib -lgcj -lws2_32 -liconv -luser32 -ladvapi32 -lmingw32 -lstdc++ -lgcc -lmoldname -lmingwex -lkernel32 -lmsvcrt
    • ↑の行を↓の行のように直します。
    • export LDLIBS= -lgcj -lstdc++ -lz
  • ビルドの際は、pdftkディレクトリに入って、make -f Makefile.Windowsで構築できると思います。
利用時の注意点:
  • Cygwin系DLLへの依存関係が発生します。次の4つのDLLへの参照を確認しました:
  • CYGWIN1.DLL
  • CYGICONV-2.DLL
  • CYGZ.DLL
  • CYGGCC_S-1.DLL
Cygwin版で、ファイルパスを書く時のヒント:
  • 空白対策→ダブルクォーテーションで囲む。
    例:"ABC DEF GHI.pdf"
  • ダブルクォーテーション対策→バックスラッシュは二重にする。
    例:"\\\\DD11\\A\\動作チェック用テストデータ.pdf"
スタティックビルドにする場合:
  • pdftk\Makefile.Windowsを更に手直しします。
    • export CXXFLAGS= -Wall -Wextra -Weffc++ -O2 -static -static-libgcc
  • 但し、CYGWIN1.DLLへの参照は引き続き発生致します。
これでビルドに成功、実行環境が整いました。

早速、日本語・全角のファイル名で試してみました:
C:\A>pdftk 日本語入力.pdf output 日本語出力.pdf

cygwin warning:
  MS-DOS style path detected: \Program Files\Java\jre6\lib\ext\QTJava.zip
  Preferred POSIX equivalent is: /Program Files/Java/jre6/lib/ext/QTJava.zip
  CYGWIN environment variable option "nodosfilewarning" turns off this warning.
  Consult the user's guide for more details about POSIX paths:
   
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

C:\A>echo %errorlevel%
0


C:\A>dir 日本語出力.pdf
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 2C33-8430 です

 C:\A のディレクトリ
2011/08/31  10:46        19,451,713 日本語出力.pdf
               1 個のファイル          19,451,713 バイト
               0 個のディレクトリ  81,907,027,968 バイトの空き領域
警告が出力されますが、機能的には問題ないようでした。

日本語・全角のファイル名を含んだ場合

整理のため、pdftk-1.44で日本語・全角のファイル名を含んだ場合に、どのような出力になるのか、まとめます。

まず、日本語・全角のファイルを使用しない、正常に動作する例:
O:\DL\pdftk-1.44-win\pdftk-1.44-win-install\bin>pdftk.exe input.pdf output out.pdf

O:\DL\pdftk-1.44-win\pdftk-1.44-win-install\bin>echo %errorlevel%
0
正常に動作しない例、日本語・全角のファイル名を含んだ場合:
O:\DL\pdftk-1.44-win\pdftk-1.44-win-install\bin>pdftk 日本語入力.pdf output 日本語出力.pdf
Error: Unexpected Exception in open_reader()
java.lang.NullPointerException
at 0x005a3abe (Unknown Source)
at 0x005a3fb2 (Unknown Source)
at 0x005a4063 (Unknown Source)
at 0x005e3e8d (Unknown Source)
at 0x005b0dad (Unknown Source)
at 0x005afa9d (Unknown Source)
at 0x005a04b2 (Unknown Source)
at 0x005bb980 (Unknown Source)
at 0x005bbbdd (Unknown Source)
at 0x0053e7a1 (Unknown Source)
at 0x0053e70a (Unknown Source)
at 0x004b2c79 (Unknown Source)
at 0x0050b757 (Unknown Source)
at 0x0050b70a (Unknown Source)
at 0x00411eaa (Unknown Source)
at 0x00412be6 (Unknown Source)
at 0x00413fe2 (Unknown Source)
at 0x0041750e (Unknown Source)
at 0x00597fc2 (Unknown Source)
at 0x00598054 (Unknown Source)
at 0x7c817073 (Unknown Source)
Error: Failed to open PDF file:
日本語入力.pdf
Errors encountered. No output created.
Done. Input errors, so no output created.
O:\DL\pdftk-1.44-win\pdftk-1.44-win-install\bin>echo %errorlevel%
1

2011年8月8日月曜日

MinGW gcj 4.4.0 でビルドしたアプリが動かない:This application has requested the Runtime to terminate it in an unusual way


このようにビルドし、実行すると、次の様なエラーメッセージが表示されます。
KU@DD5 ~/testj
$ gcj --main=Hello -o Hello Hello.java

KU@DD5 ~/testj
$ ./Hello.exe

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

このように対策いたしました。

次のオプションを含む:
-findirect-dispatch

このように解決いたしました。
KU@DD5 ~/testj
$ gcj --main=Hello -o Hello -findirect-dispatch Hello.java

KU@DD5 ~/testj
$ ./Hello.exe
Hello

始めます

Pdftkを改善いたします。主に日本語ファイル名への対応版を作ることが目的です。

その過程で生じる問題や解決法などを公開していきたいと思います。

よろしくお願いいたします。