著作一覧 |
__APPLE__は定義されているが、__DARWIN__は無い。というか、man gccでも無いし、何見りゃいいんだ?
JAVA_HOMEは未定義。
しかし、/System/Libarary/Frameworks/JavaVM.frameworkの下を見るのがどうも決まりのようだ(バージョン別のシンボリックリンクもできている)。ただしincludeではなくHeaders、libではなくLibraries(こっちは/System直下のと異なり複数形)。
libjvm.soに相当するのは、libjvm_compat.dylib(拡張子はちょっと違うかも)。よくnmとか覚えていたもんだ。
以上の修正をextconf.rbとload.cに入れたら比較的すんなりtest.rbを通った……わけがない。なぜか、loadimport('java.lang.Integer')したクラスのnewに関してだけはエラーになる(java.lang.Longとかは通る)。
javacが吐くメッセージは、shift_JIS。……iTermの言語設定をjavac使う前にutf-8からshift_jisに変更する必要がある(Windows−DOSだと改行コードが影響されるのでだめ)。
ああ、ruby-dev:23712の山本さんのパッチを当てれば良かった。次の機会に入れさせてもらうことにしよう……
犯罪捜査研究をどうせ買うのなら情報をくれている人へポイントを付けたいなと思えども無かったりして。って言うか在庫切れのままだし。
おお、どうもありがとうございます。早速見てみます。
というのもそうですが、これ無茶苦茶便利ですね。暗記しておこう。
ちなみに、SFUでやってみたらこうなった。
$ gcc -E -dM -xc /dev/null #define __DBL_MIN_EXP__ (-1021) #define __FLT_MIN__ 1.17549435e-38F #define _X86_ 1 #define __CHAR_BIT__ 8 #define __WCHAR_MAX__ 65535U #define __DBL_DENORM_MIN__ 4.9406564584124654e-324 #define __FLT_EVAL_METHOD__ 2 #define __i386__ 1 #define __SIZE_TYPE__ unsigned int #define __LANGUAGE_C 1 #define __DBL_MIN_10_EXP__ (-307) #define __FINITE_MATH_ONLY__ 0 #define __GNUC_PATCHLEVEL__ 0 #define __FLT_RADIX__ 2 #define __LDBL_EPSILON__ 1.08420217248550443401e-19L #define __SHRT_MAX__ 32767 #define __LDBL_MAX__ 1.18973149535723176502e+4932L #define __LANGUAGE_C__ 1 #define _M_IX86 300 #define __OPENNT 1 #define __LDBL_MAX_EXP__ 16384 #define __LONG_MAX__ 2147483647L #define __INTERIX 1 #define __SCHAR_MAX__ 127 #define __DBL_DIG__ 15 #define __USER_LABEL_PREFIX__ _ #define __tune_pentium__ 1 #define __STDC_HOSTED__ 1 #define __stdcall __attribute__((__stdcall__)) #define __LDBL_MANT_DIG__ 64 #define __FLT_EPSILON__ 1.19209290e-7F #define __LDBL_MIN__ 3.36210314311209350626e-4932L #define __WCHAR_TYPE__ short unsigned int #define __FLT_DIG__ 6 #define __FLT_MAX_10_EXP__ 38 #define __INT_MAX__ 2147483647 #define __FLT_MAX_EXP__ 128 #define __DECIMAL_DIG__ 21 #define __DBL_MANT_DIG__ 53 #define __WINT_TYPE__ unsigned int #define __GNUC__ 3 #define __LDBL_MIN_EXP__ (-16381) #define __tune_i586__ 1 #define __LDBL_MAX_10_EXP__ 4932 #define __DBL_EPSILON__ 2.2204460492503131e-16 #define __DBL_MAX__ 1.7976931348623157e+308 #define __USING_SJLJ_EXCEPTIONS__ 1 #define __DBL_MAX_EXP__ 1024 #define __FLT_DENORM_MIN__ 1.40129846e-45F #define __LONG_LONG_MAX__ 9223372036854775807LL #define __FLT_MAX__ 3.40282347e+38F #define LANGUAGE_C 1 #define __GXX_ABI_VERSION 102 #define __FLT_MIN_10_EXP__ (-37) #define __FLT_MIN_EXP__ (-125) #define i386 1 #define __GNUC_MINOR__ 3 #define __DBL_MAX_10_EXP__ 308 #define __LDBL_DENORM_MIN__ 3.64519953188247460253e-4951L #define __DBL_MIN__ 2.2250738585072014e-308 #define __PTRDIFF_TYPE__ int #define __LDBL_MIN_10_EXP__ (-4931) #define __REGISTER_PREFIX__ #define __cdecl __attribute__((__cdecl__)) #define __LDBL_DIG__ 18 #define __NO_INLINE__ 1 #define __i386 1 #define __FLT_MANT_DIG__ 24 #define __VERSION__ "3.3" #define __declspec(x) __attribute__((x))
#if defined(__APPLE__) && defined(_ARCH_PPC)
が良さそうだな。
あと、上でimport('java.lang.Integer')がどうしたとか書いているのは、たまたまWin32とLinuxとSolarisのJ2SEでは Integer(int value);が先にヒットしただけでInteger(String value);の存在を忘れていたということでした。
で、問題はjFileChooserとかだがこれはわかりやすい。
ibk:~/rjb-0.0.9/samples$ ruby filechooser.rb 2004-06-20 22:03:16.160 ruby[419] Apple AWT: Running on AppKit Thread when not expected. (src/macosx/native/apple/awt/awt.m - JNI_OnLoad : 297) 2004-06-20 22:03:16.164 ruby[419] Please file a bug report at http://developer.apple.com/java/ with this message and a reproducible test case. 2004-06-20 22:03:16.236 ruby[419] Apple AWT Java VM was loaded on first thread -- can't start AWT. Exception in thread "main" java.lang.InternalError: Can't start the AWT because Java was started on the first thread. Make sure StartOnFirstThread is not specified in your application's Info.plist or on the command line at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1560) ...snip... filechooser.rb:6:in `import': `javax.swing.JFileChooser' not found (RuntimeError) from filechooser.rb:6原因はわかったからではこれをどうするかだが。
ジェズイットを見習え |
/usr/libexec/gcc/darwin/ppc/3.1/specs に書いてあるものと思われます
gcc -E -dM -xc /dev/null