50 :
デフォルトの名無しさん :
03/03/26 09:33 質問です。
_, ._
( ゚ Д゚)
( つ旦O
と_)_)
http://gcc.gnu.org/ml/java/2002-12/msg00105.html を参考にして、libswt.aを作りました。
$ ls
Test.java build.sh* libswt.a swt-win32-2132.dll* swt.jar
$ gcj -mwindows --classpath=./swt.jar --main=Test Test.java -L. -lswt
/cygdrive/c/WINNT/Temp/ccjjEJMB.s: Assembler messages:
/cygdrive/c/WINNT/Temp/ccjjEJMB.s:38: Warning: .stabs: description field '100004' too big, try a different debug format
/cygdrive/c/WINNT/Temp/ccjjEJMB.s:206: Warning: .stabs: description field '10001' too big, try a different debug format
$ ./a.exe Exception in thread "main" java.lang.UnsatisfiedLinkError: swt-win32-2132: file not found と、カレントディレクトリにswt-win32-2132があるにも関わらず、file not found になってしまいます。 %SYSTEM_ROOT%/system32/にDLLを突っ込んでも同じでした。 解決策お願いします。 [環境] Windows2000sp3 $ uname -a CYGWIN_NT-5.0 rcl 1.3.22(0.78/3/2) 2003-03-18 09:20 i686 unknown unknown Cygwin $ gcj --version gcc (GCC) 3.2 20020927 (prerelease) Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Cygwin版もMingw版も出力をShift-JISにしないと日本語がまともに表示できない・・・
>>53 そりはコンソールの表示文字コードの問題かと・・・
55 :
デフォルトの名無しさん :03/04/05 23:16
環境にあわせてエンコードしてくれるものだと思っていた漏れがバカでした・・・鬱
(^^)
保守sage
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
61 :
デフォルトの名無しさん :03/06/08 04:12
3舗?U
MinGW GCJ 3.3 で コンソールへの日本語出力 と MS SQL Server JDBC ドライバのコンパイルはできました。 SWT, JDBC, 日本語 がこなせるので GCJ でも それなりのアプリケーションを構築できるようになりましたね。
64 :
デフォルトの名無しさん :03/07/03 19:38
Pure Java なデータベース HSQL をネイティブコードにコンパイルできたよ。 ちゃんと動いているし。
GCJ 3.4もあるみたいなんで早速GCJ 3.4を試してみます
実行時に必要になるオブジェクトやリソースがリンクされないんだけど…。
public static void main(String[] args) {
Calendar.getInstance();
}
これがエラーになるんだよね。どのカレンダー実装を使うかは
実行時に判断されるため、リソースオブジェクトがリンク時には
リンクされないのだ。
ar x libgcj.a Calendar.o
として、リソースオブジェクトを取り出して、
gcj --main=Hello -o Hello.exe Hello.java Calendar.o
のように直接リソースオブジェクトを指定すれば、正しくリンクされて
きちんと動作する。他にも Input_SJIS.o や Output_SJIS.o などの
文字コードコンバート系 オブジェクトもリンクされないので、
http://www.thisiscool.com/gcc33_mingw.htm にある
バイナリでは、デフォルトでコンソールに日本語を表示することができない。
Input_SJIS.o などをリンクするためには、他から静的に参照されてればいいので、
IOConverter.java などで new Input_SJIS(); などとしておけば良い。
そうすれば、リンク時に Input_SJIS.o が必要だということが分かるから、
ちゃんと Input_SJIS.o がリンクされて日本語が通る。
そのうち、構成しなおした libgcj.a でもアップするか…。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
71 :
デフォルトの名無しさん :03/07/21 22:38
保守age
(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
76 :
デフォルトの名無しさん :03/08/18 23:00
>>76 ありがたいっす。
ところで、Windows 用(っつか case sensitive でないプラットフォームの) GCJ は
(case sensitive なプラットフォームで)クロスコンパイルしないとビルドできないのは変わって無いっすか?
おそらくね。メーリングリスト見てても Windows用GCJをコンパイルしている人は みんな Linux でクロスコンパイルしてるね。 Cygwin でコンパイルに成功した例は聞いたことないです。
79 :
デフォルトの名無しさん :03/09/23 12:46
GCJってメモリーリークが激しい気がするんだけど。
mingwのサイトにgcj3.3があるね
81 :
デフォルトの名無しさん :03/10/11 19:47
>>41 に書いてる通りにやったんですが、
SWTを使わないものですらネイティブコンパイルができません。
クラスファイルへのコンパイルなら成功してます。
cc1 に対して No Such File or directory エラーが出てたので、
C:\MinGW\lib\gcc-lib\mingw32\3.2.3
にパスを通したんですが、今度は crtbegin.o を開けないと言われました。
上記のディレクトリにファイルは存在するんですが・・・
何が問題なんでしょうか?
環境はこんな感じです。
OS:WinXP
MinGW:MinGW-3.1.0-1.exe
GCJ:gcc-java-3.3.1-20030804-1.tar.gz
自己解決しました。 MinGWとgcjで微妙にバージョンが違うのが原因だったみたいです・・・
84 :
デフォルトの名無しさん :03/10/21 20:21
gcjでsunのjavax.soundのソースと一緒にコンパイルしたのですが 実行時に javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input stream とでてしまいました。 同じソースでjavaでは正常にwaveが再生できたのですが。 InputStreamの実装が違うのでダメなのでしょうか。 ちなみにwaveファイルが無くても同じ例外が出てしまいます。
>>84 javax.sound が使用する DLL とかは調べた?
>>85 レスありがとうございます。
jsound.dllだと思います。
コンパイル時にオプション-Lで指定しました。
コンパイル時も実行時もエラーが出ないので
dllまわりはOKだと思うのですが。。
>>84 んじゃ、com.sun.media.sound パッケージが無いとか。
>>87 それが原因のようです。
使っているファイルを発見しました。
どうもありがとうございます。
途中経過を報告しますと
rt.jarを使ってコンパイルしようとすると
コンパイラの内部エラーがでます。
もうすこし考えてみます。
.oファイルを作ろうとjarをコンパイル中に たくさん com/sun/media/sound/SunMidiFileWriter.java:124: warning: exception handler insid e code that is being protected のようなwarningが出て止まります。 これは何が悪いのでしょう?
>>89 "warning: exception handler inside code that is being protected" でぐぐったら
http://gcc.gnu.org/ml/gcc-patches/2002-08/msg01637.html が見つかった。
適当な日本語訳
> 全てのJavaバイトコードがJavaコンパイラで生成されている
> わけではなく、それらの幾つかは非常に奇妙なものかもしれない。
> 私は Java Server Pages 用の特別なコンパイラで、例外ハンドラが
> 再帰的に自分自身を呼び出すというインチキにしか見えないコードを
> 生成するのを見たことがある。これは正常に動作しないだろうが
> (それとも正常に動くのか?)、Javaバイトコード仕様に完全に従っている。
> よって、このようなバイトコードを許すが、警告を出す事にする。
>>90 >>91 親切にレスしてくださって、
ありがとうございます。
早速、参考にして調べてます。
93 :
デフォルトの名無しさん :03/10/24 01:28
>>81 自分も同じ問題がおきたんですが同じバージョンのMinGWとGCJがあるんでしょうか?
探してみたんですけど見つけられなかったんですが・・・
>>94 レスありがとうございます。
紹介していただいたサイトのminGWをインストールし、
38さんの解説ページ通りにSWTを使ったプログラムをコンパイルできました。
保守
97 :
デフォルトの名無しさん :03/11/25 01:03
念のためもう一度試してみたらどうも-Dオプションが一つしか認識しないっぽくて うまくいかなかったので直しました_| ̄|○
>>98 は勘違いみたいなのでなかったことにしてください_| ̄|○
101 :
デフォルトの名無しさん :03/11/26 11:34
おつ!
こういう、やる気のある人がいるっていうのは良いことだね。 NativeTest の Readme.txt の説明で Input_SJIS.o と Output_SJIS.o を リンクしているけど、これを不要にするために jni にチャレンジしたんじゃないの? 結局、その試みは失敗しているようだけど…。せっかく jni にしているのに、 C側で CallObjectMethod() を使用して Java側の getBytes() を使っちゃったら 意味ないよね。コード変換を Java側でやることになるから jni の意味がない。 Input_SJIS.o, Output_SJIS.o の問題を回避するために jni を使うのであれば、 jniメソッドで受け取った jstring を GetStringChars で jchar* に変換してから Win32API の WideCharToMultiByte() に渡してあげるといいよ。 これで、UTF-8 から SJIS に変換できるはず。
>>102 すみません、説明不足でした
NativeTestは、Javaから渡した日本語の文字列をネイティブ側からString#getBytes()を使ってSJISの文字配列に変換し、
printfで表示できるかどうかを試したサンプルです
これができると移植性を保ちつつJavaとCの間で文字列をやりとりしやすくなるので試してみました
漏れの環境ではうまくいったのですが
うーん、JNIは難しい・・・
>>103 NativeTest はちゃんと動いたよ。ただ、Console/Test.java と
何が違うのか分からない。ただ、JNI でオーバーヘッドを
増やしているだけだと思うんだけど。移植性を保つというのも…。
良かったら、もうちょっと説明してくれませぬか。
それと、なんか気を使われているようだけど、
>>97 が自分で
まとめた成果なのだから、自由に Web で公開してかまわないんじゃないか。
GCJ関係のリンクに
http://gcc.gnu.org/ml/java/ があると良いかも。
gcj3.4 のおっかけをするなら必須だと思われ。
「CNIではネイティブメソッドごと実行ファイルにリンクすることができます」 って書いてあるけど、GCJ なら JNI 使っても同じことができるよ。 NativeTest で gcc -shared -o NativeTest.dll NativeTest.c とやっているのを gcc -C -o NativeTest.o NativeTest.c として Input_SJIS.o なんかと同様に一緒にリンクするだけ。
>>105 変換した文字配列はprintfに限らずchar*を引数にもつ関数にそのまま渡せるんで本質的にはConsoleとは違います
byte[]を引数にしてgetBytes()したbyte配列を渡してもいいのですが
(今考えるとそのほうがオーバーヘッド少なく済みそうな気もします・・・)
gcjでもJavaのメソッドを呼べるのか試してみたかった気持ちがあったのと
>>97 ,
>>104 の方法がJNI経由でも有効なのかどうかを確かめるものなので
ああいうサンプルになりました
説明が下手くそですいません_| ̄|○
> それと、なんか気を使われているようだけど、
>>97 が自分で
> まとめた成果なのだから、自由に Web で公開してかまわないんじゃないか。
ありがとうございます
今回はさすがに
>>67 を書いてあることほぼそのままなんで躊躇ったんですが
目次からリンクを張ることにします
>GCJ関係のリンクに
http://gcc.gnu.org/ml/java/ があると良いかも。
確かにそうですね、このスレやgoogleの検索を参考にしていろいろ試していたので
気づきませんでした。早速リンクしておきます
>>106 CNIについて書いていた頃に試してうまくいかなかった記憶はあるのですが
いつのまにか出来るようになっていたんですね
また時間があれば試してみます
109 :
デフォルトの名無しさん :03/12/21 01:42
「D」が出ちゃったから立場が微妙だな... Javaに似た文法だがあっちはC言語のライブラリ使えるし テンプレートもあるし。
> Javaに似た文法だが …
113 :
デフォルトの名無しさん :03/12/21 17:30
gcの実装ってどうなってんの?やっぱ別スレッドが立ってるわけ? つーか、何処までネイティブなのかいまいち分からんがな。 JavaVM無いと動かないんでしょ?これ
> gcの実装ってどうなってんの? ソース公開されてんだし、自分で調べれば? > JavaVM無いと動かないんでしょ?これ exe 単体で動くけど。
115 :
デフォルトの名無しさん :03/12/21 18:03
>>114 んなこと言わずに教えてくれよ。
>exe 単体で動くけど。
そうなんだ。
>JavaVM無いと動かないんでしょ?これ
つーか
>>29 見ればわかるか
スマソ
117 :
デフォルトの名無しさん :03/12/21 18:05
ソースを見るより、gcjの吐いた機械語を見たほうが早いと思われ。 多分、起動時に、libgcjに実装されてるgcスレが立つんじゃないの?
gcjってboehm-gc使ってるって聞いたけど違うの?
119 :
デフォルトの名無しさん :03/12/24 01:42
誰も使ってないの?
ネイティブコンパイルに魅力を感じないので使ってない。 必要に迫られたら使うあるのみ
>>120 実行環境が何メガもあってバージョン間の相性もあるとなれば
配布にも支障をきたすし、
ベンチマーク取られるようなソフトにはアウト。
これはかなりの障害だよ。
いまどきLinux−MacOSX−Windowsのクロスプラットホーム環境で
ソース互換の開発環境だってあるんだし、SunのJavaが
実行形式吐かないのはゆゆしき問題だよ。
>>121 実行形式ならC++とか使えばいいと思うのだが。
>>121 要は各プラットフォームで共通に使えるGUIライブラリとかがほしいってことじゃないの?
>>122 それだともはやPCではJavaに出る幕はない。
アプレットの動く環境からユーザーは離れつつある。
全部C++でイケルんだよ。
> アプレットの動く環境からユーザーは離れつつある。 アプレットも細々と使われてるけどね。 アプレットの一時的な流行(?)が終わったのは何年も前の話しだし。
126 :
デフォルトの名無しさん :03/12/25 23:03
Javaはサーバ向けだろもはや。 TigerからはclientVM無くなるって話だし。
127 :
デフォルトの名無しさん :03/12/25 23:03
GUIが(体感的に)遅いのがマズかったよなー。
あれだけ抽象度が高いGUIをVMでやろうという心意気はいいけど、 盛り込みすぎだよなぁ…。
>>126 1.5.0-beta-b31 の段階では client と server フォルダ両方あるけど。
>>122-129 ここは GCJ スレなのでそーゆー話題は死滅スレにでも逝ってやってください
>>137 サーバーならg++でいいじゃん。
gnu cgiccはマルチパート対応でアップローダも書けるし、
固定長バッファも使用しないから
バッファオーバーフローも起きない。
なによりboostを始めとして開発環境が超強力。
137に期待がかかりました
133 :
デフォルトの名無しさん :03/12/25 23:34
>>129 あれ?あった?
無いのはIA64版だったかなぁ。失礼。
135 :
デフォルトの名無しさん :04/01/06 15:08
あたい
世界は核の炎に包まれた
だれかJFaceでWin32ネイティブコンパイル成功しましたか? いろいろ試したんですが、ApplicationWindowを使うと即死・・・ Actionのサブクラスなら大丈夫でした。ちなみにWin2K、WinXPです。 あと、これは別なんですがアイコンファイルとかを実行ファイルに 埋め込むことは可能なんですかね?
試してないけどアイコンを定義したrcファイルをwindresでコンパイルしたresをリンクすれば可能だと思う
142 :
デフォルトの名無しさん :04/01/17 12:35
pooh@linux:/hdc3/data4/java/program> gcj --version gcj (GCC) 3.3.1 (SuSE Linux) pooh@linux:/hdc3/data4/java/program> gcj -O3 -static --main=Hello -o Hello.exe Hello.java /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libgcj.a(natRuntime.o)(.text+0xced): In function `java::lang::Runtime::insertSystemProperties(java::util::Properties*)': : Using 'getpwuid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libgcj.a(natInetAddress.o)(.text+0x34f): In function `java::net::InetAddress::lookup(java::lang::String*, java::net::InetAddress*, bool)': : Using 'gethostbyaddr_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc-lib/i586-suse-linux/3.3.1/../../../libgcj.a(natInetAddress.o)(.text+0x244): In function `java::net::InetAddress::lookup(java::lang::String*, java::net::InetAddress*, bool)': : Using 'gethostbyname_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking pooh@linux:/hdc3/data4/java/program> ./Hello.exe セグメンテーション違反です libgcjをスタティックリンクしようとするとエラーになります。 なんで? ダイナミックリンクだと問題ないんですが? OSは、Linux2.4.21-166(SuSE)です。
エラーメッセージ見る限りでは今Linuxにあるglibcとlibgcjをビルドしたときに使ったglibcのバージョンが違うってことじゃない?
>>143 今、SuSE9.0のデフォルト使ってるんです
ひょっとして、libgcjをりビルドするって
こと?ですか
145 :
デフォルトの名無しさん :04/01/20 13:49
gcjでバイトコードを生成することもできるの? それとも、普通にSunのjavac使わないとだめ?
>>145 gcj -Cでバイトコード作ってくれる
>>146 となるとgcjで普通にアプレット作ったりとかも
出来るわけですね。
>>147 うーん、試したことないけどできるんじゃないかな?
実行はブラウザかSunJSRのアプレットビューアーじゃないとダメだろうけど
149 :
デフォルトの名無しさん :04/01/29 15:27
gcjでJCEを使ったコードをコンパイルしたいのですが何か方法はないでしょうか。 単純にjce.jarをコンパイル使用としてもだめでした。。。
どこで撥ねられてるんだ
age
フルスクリーンアプリ作れますか?
SDLとかOpenGLのラッパ使えば出来るかもね
>>152 java.awt.GraphicsDevice#isFullScreenSupported() がtrueなら
java.awt.GraphicsDevice#setFullScreenWindow(Window w) でフルスクリーン。
>>153 変なこと書かないように。
>>153 gcj って awt をあんまりサポートしてないのにできるんだ?
JSDL以外で公開されてるJavaのSDLラッパーってある?
>>157 cni使って自分でラップしたら。jni使ったことあるならcniには感動するぞ。
159 :
デフォルトの名無しさん :04/03/21 13:53
また、SWTサンプル集
http://amateras.sourceforge.jp/cgi-bin/fswiki/wiki.cgi/swt?page=FrontPage 内のプログラムをコンパイルしてみましたが、
gcj LabelSample1.java --main=LabelSample1 -I. -Iswt.jar swt.o -o LabelSample1
こちらも実行できました。しかし文字化けしてしまいました。
そこで再度スレの内容を確認し、
>>67 さん、
>>97 さんの書き込みに気づき、
http://freett.com/gikob/gcj/japanese.html のページを参照し、
i686-pc-mingw32/lib/libgcj.aからInput_SJIS.oとOutput_SJIS.oを取り出し、
javac LabelSample1.java -classpath swt.jar
gcj -Dfile.encoding=SJIS -Iswt.jar -mwindows --main=LabelSample1 -o LabelSam
ple1 LabelSample1.class swt.o Input_SJIS.o Output_SJIS.o
とすることでSWT上で日本語表示ができました。
できればインストール済みのcygwin gcc/gcj3.3.1をそのまま使いたかったのですが、↑のgcc(3.4?)がgcj/swt専用に作られたものみたいなので
そちらを使います。(gcj実行中にいくつかプロンプト画面が立ち上がるのが気になりますが・・)
ありがとうございました。
gnome-gcjってどうやって使うの? なんかいまいちわからん
gcj でコンパイル時に -Duser.language=ja -Duser.region=JP とか指定すると locale を切り変えられるんだけどこれって他の 方法はないのでしょうか?? できたら実行時に実行環境のlocaleを見てほしいんですが… thisiscool の gcj を使ってます。
>>163 変だね。
とりあえず、ホームディレクトリの.i18nファイルに
LC_ALL=ja_JP
って書いておけば、次回起動時から反映されるかも
lwjglを試してみたがどうやらgcj側のバグで動かないらしい・・・orz
antでコンパイルした場合とコマンドラインから直接コンパイルした場合で結果が違うのはなんでなの? antだとエラーで終わって、gcj直だと無事終了する。 antもgcjも "hallo world" ではうまくいったので大きく間違っている部分はないはず。 ant build.xml: <property name="mainclass" value="nippon.tokyo.dreamtheater.smaf.SMAFMake"/> <property name="basedir" value="."/> <property name="srcdir" value="nippon/tokyo/dreamtheater/smaf"/> <property name="dstfile" value="../bin/execute.exe"/> <apply executable="gcj" dir="${basedir}"> <arg line="-o ${dstfile}"/> <arg value="--main=${mainclass}"/> <fileset dir="${srcdir}" includes="*.java"/> </apply> gcj: gcj -v -o ../bin/execute.exe --main=nippon.tokyo.dreamtheater.smaf.SMAFMake nippon/tokyo/dreamtheater/smaf/*
167 :
デフォルトの名無しさん :04/06/03 20:11
>>166 エラーで終ったんならエラーメッセージくらい書いてくれないと…
エラーメッセージもなしに誰が答えられるってのよ…?
とりあえず
<apply executable="gcj" dir="${basedir}">
を
<apply executable="echo" dir="${basedir}">
とかに書き換えて期待した通りの引数が渡っているかどうか
を確認するとかはどうよ?
>>168 そういえば、忘れてました。エラーメッセージ。
↓こんなのがソースファイルの数だけでてます。
[apply] /home/user/tmp/ccFGtfvO.o(.text+0x24): In function `main':
[apply] : undefined reference to `nippon::tokyo::dreamtheater::smaf::SMAFMake::class$'
[apply] collect2: ld returned 1 exit status
[apply] Result: 1
>>166 main が参照している
nippon.tokyo.dreamtheater.smaf.SMAFMake
クラスが見つからないってことね…
なんとなく分った…
fileset でファイル全部を指定しているつもりなんだろうけど,その指定
の仕方だと fileset でマッチした各ファイルについて gcj を実行する
ことになるんじゃなかったかな?
だから複数の *.java があるとクラスが見付からなくてエラーになる
>>166 こんな感じでどうでしょう…?
parallel="true" がポイントね。
<apply executable="gcj" dir="${basedir}" parallel="true" >
<arg line="-o ${dstfile}"/>
<arg value="--main=${mainclass}"/>
<srcfile/>
<fileset dir="${srcdir}" includes="**/*.java"/>
</apply>
>>170-171 ありがとう。
<apply>にparallel="true"を追加することで
正常にコンパイルできました。
コンパイルできません。 こんなんでる。↓ cnisupport.cc:33:21: gcj/cni.h: No such file or directory cnisupport.cc:34:31: java/lang/Integer.h: No such file or directory cnisupport.cc:35:30: java/lang/String.h: No such file or directory cnisupport.cc:36:33: java/util/Hashtable.h: No such file or directory In file included from cnisupport.cc:37: cnisupport.h:36:21: gcj/cni.h: No such file or directory cnisupport.h:37:30: java/lang/String.h: No such file or directory In file included from cnisupport.cc:37:
みんなGCJでGUIは何のツールキット使ってるのよ?
HelloWorldで日本語出なくて諦めますた。へっぽこでごめんね。
>>175 本当に出ないのかって今試したら
普通にでたんだけど?
仕切りみたいになってるけど一応 gcjはWindowsのものでもthisiscoolのgcjとmingw公式のgcjとcygwinのgcjがあるんで どれか明記したほうがいいよ
>>179 LinuxならGNU classpathがあるけどあれってまだAWTだけだったかもしれん・・・
>>179 > 世の中の10%はWindowsを使っていないってこともあるし、
> 俺もその10%に入るので
そうだったらなおさら明記すべきだと思うが・・・
182 :
デフォルトの名無しさん :04/06/29 22:16
umm- gui toolkitがどれもこれもうまくインストールできない。 しょうがないので自作しようと思うが、 swingでいうところの、 JWindow,JFrame,JButton,JLabel,JCheckBox,JRadioButton,JTextArea,JTextFieldと レイアウトマネージャさえあればいいのかしら?
gcjでjavaのメソッドをjni経由で利用できるのかな?
186 :
デフォルトの名無しさん :04/07/20 07:10
>>185 そうすると、jni経由でSwingも使えるかな?
やってみるか
出来るけどさほど大した意味はないな
>>186 そもそも gcj でまともに動く Swing があるのか,と…
ほー、c/c++ などのツールキットとして Swing を使うのか。 おもしろいけど、使い物にならないんだろうな。
わからないので聞きます。 Linux上のgcjで、SWTを使おうとしているのだけど 1 2 3 import org.eclipse.swt.SWT; 4 import org.eclipse.swt.graphics.Image; 5 import org.eclipse.swt.layout.RowLayout; 6 import org.eclipse.swt.widgets.Display; 7 import org.eclipse.swt.widgets.Label; 8 import org.eclipse.swt.widgets.Shell; 9 10 /** Image View sample **/ 11 public class sampleswt01 12 { 13 14 /** main method of View Image **/ 15 public static void main(String args[]) 16 {
17 Display display = new Display(); 18 Shell shell = new Shell(display); 19 shell.setText("Image View"); 20 shell.setLayout(new RowLayout()); 21 Image image = new Image(display,"./kago.jpg"); 22 Label label = new Label(shell,SWT.NONE); 23 label.setImage(image); 24 shell.pack(); 25 shell.open(); 26 while(!shell.isDisposed()) 27 { 28 display.readAndDispatch(); 29 display.sleep(); 30 }//while 31 display.dispose(); 32 }//main 33 34 /** non exec constractor **/
35 public sampleswt01() 36 { 37 }//method sampleswt01 38 39 }//class sampleswt01 という単純なソースを gcj --main=nippon.tokyo.dreamtheater.test.sampleswt01 -fjni -L/usr/local/lib -lswt-gtk2 -fjni -I/usr/local/lib/libswt-gtk2.jar -o ../bin/sampleswt01 nippon/tokyo/dreamtheater/test/sampleswt01.java という単純なコンパイルを行って、実行ファイルはできあがったのですが、 Exception in thread "main" java.lang.UnsatisfiedLinkError: memmove at _Jv_LookupJNIMethod (/usr/lib/libgcj.so.4.0.0) at org.eclipse.swt.internal.gtk.OS.memmove(org.eclipse.swt.internal.gtk.GtkStyle, int) (/usr/local/lib/libswt-gtk2.so) at org.eclipse.swt.widgets.Display.initializeSystemResources() (/usr/local/lib/libswt-gtk2.so) at org.eclipse.swt.widgets.Display.init() (/usr/local/lib/libswt-gtk2.so) at org.eclipse.swt.graphics.Device.Device(org.eclipse.swt.graphics.DeviceData) (/usr/local/lib/libswt-gtk2.so) at org.eclipse.swt.widgets.Display.Display(org.eclipse.swt.graphics.DeviceData) (/usr/local/lib/libswt-gtk2.so) at org.eclipse.swt.widgets.Display.Display() (/usr/local/lib/libswt-gtk2.so) at nippon.tokyo.dreamtheater.test.sampleswt01.main(java.lang.String[]) (Unknown Source) というよくわからないエラーが出てとまります。 memmoveが見付からないみたいですが、それがどこにあるのか見当がつきません。
man 3 memmove とか?
>>193 見ました.
memmoveのソースはカーネルのあたりにあったのですが、
manによると、引数をとるようですね。
でも、このエラーでは何も出てませんね。
そもそも、memmoveが見付からないという状況がわからないんですが。
195 :
デフォルトの名無しさん :04/09/04 00:21
>>192 見付からないのは、native memmoveがJNI経由で呼ぶmemmoveってメソッドだから、
man memmoveででてくるやつとは関係ない。
たぶんあんたの環境に、libswt-pi.soってのが足りないんだと思う。
> man memmoveででてくるやつとは関係ない。 補足。完全に関係無いって訳ではなく、JNIから呼ばれるmemmove内から、 man memmoveに出てくるやつが呼ばれてるはず。だけど、今回の問題とは 関係ないってこと。
197 :
デフォルトの名無しさん :04/10/02 16:54:16
198 :
デフォルトの名無しさん :04/10/02 17:27:24
>>9 > 2. インストールしたら cygwin のシェルで
> $gcc -v
> と打ってみましょう。
> バージョンが 3.x、--enable-languages に java が入っていることを確認してください。
大量のオプションがずらずら一行で並んで
5秒たっても見つからなかったので↓こうしました。
$ for s in `gcc -v 2>&1`; do echo $s; done | grep languages
結果、
--enable-languages=c,ada,c++,f77,pascal,java,objc
入ってますたが、もっと分かりやすい見分け方はないんですか?
すいません。swtのバージョンを2.1.3のやつにしたら普通にできました
お!アイコンできた。gccと方法一緒だね
201 :
デフォルトの名無しさん :04/10/06 17:00:10
ライセンスについて教えて。 gcjで作ったバイナリの配布等、制限ありますか? 英語はどうも苦手で…
>>201 基本的には libgcj は GPL なので、スタティックリンクするにしろ
ダイナミックリンクするにしろ、 GPL で配布しなければならない。
ただし、使用している libgcj が LIBGCJ_LICENCE などで例外的に
GPL にとらわれないリンクを認めている場合がある。
要は使ってる libgcj による。
>>202 LGPLじゃなかったっけ?
ダイナミックリンクならGPLにしなくても
いいんじゃなかったっけ?
例外条項の解説お願い。
>>202 に書いてある。不足なら自分で原文を読むなり調べるなりしろ。
っつか、その程度も他人に頼らんと出来ないなら gcj を使うのは素直に諦めた方が…
はーい。
>>204 のリンク先にlibgcjが理由で
GPLになったりしないって書いてありました。
LIBGCJ_LICENSEのほうは例外として
他の部分でライセンスの不整合がなければ
バイナリを作るためにリンクしても
できたバイナリの複製、配布はじゆうですよ。て意味かなあ。
LGPLだって何度も言ってるだろ
gcj を使うのは素直に諦めた方が…
>>209 そだね。ライセンス読まずに自分勝手な解釈してるし。
>>208 っつーか、libgcj が使ってる GNU Classpath も GPL なので。
> LIBGCJ_LICENSEのほうは例外として > 他の部分でライセンスの不整合がなければ > バイナリを作るためにリンクしても > できたバイナリの複製、配布はじゆうですよ。て意味かなあ。 て意味ではありません。 っつか、人工無能翻訳でも もうちょっとマトモだと思う…… やっぱり gcj を使うのは素直に諦めた方が……
gcjの利点ってなに?
214 :
デフォルトの名無しさん :04/11/04 01:19:17
>>204 http://gcc.gnu.org/java/faq.html#1_1 1.1 What license is used for libgcj?
libgcj is distributed under the GPL, with the 'libgcc exception'. This means that linking with libgcj does not by itself cause your program to fall under the GPL. See LIBGCJ_LICENSE in the source tree for more details.
釣ってるの?
215 :
デフォルトの名無しさん :04/11/13 05:50:25
http://savannah.gnu.org/cgi-bin/viewcvs/gcc/gcc/libjava/LIBGCJ_LICENSE?rev=1.2.2.1&content-type=text/vnd.viewcvs-markup 例外規定
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version.
216 :
デフォルトの名無しさん :04/11/13 06:00:27
その訳、 特別の例外として、このライブラリーの著作権保有者は、 独立したモジュールのライセンス条件にかかわらず、 それぞれのリンクされた独立したモジュールに対し そのモジュールのライセンス条件が適合すれば、 あなたの選んだ条件の下に、実行ファイルを作成するため、 作成された実行ファイルを複製し配布するためにこのライブラリーを 独立したモジュールとリンクする許可をあなたに与えます。 独立したモジュールとはこのライブラリーに由来しないか、 基づかないモジュールです。 このライブラリーを修正した場合は、あなたのバージョンのライブラリーに この例外を拡張してもよいですが、しかし、そのようにする義務はありません。 あなたがそのようにしたくない場合は、あなたのバージョンからこの例外を 削除してください。
っつか、例外付きGPLとLGPLの区別が付いてない奴がいるのかよorz
218 :
デフォルトの名無しさん :04/11/22 16:06:21
219 :
デフォルトの名無しさん :04/11/25 06:02:54
もう一つ、gcc.gnu.orgのjava project mailing listより
http://gcc.gnu.org/ml/java/2003-11/msg00300.html On Tue, 2003-11-25 at 23:56, Steve D. Perkins wrote:
> I found information on the licensing for GNU Classpath, but that
> left me even more confused. For one thing, it's the GPL with a "special
> exception" that seems to essentially make it LGPL'ed (why do certain
> people hate the LGPL so much? do you really think calling it by another
> name makes it different?).
It is definitely different. The GPL+exception license we use does not
have the relinking requirement present in the LGPL. This makes it much
more friendly to embedded developers generating static executables (for
instance). The license is similar in spirit to the libgcc and libstdc++
licenses.
>>200 よろしければ、方法詳細ご教授願いたく。
223 :
デフォルトの名無しさん :05/01/15 04:14:52
SwingWT使ってみた人いる? 感想希望
224 :
デフォルトの名無しさん :05/01/19 16:52:27
age
>>223 SWTが必要なあたりがアレだよね
RHUGっていまいちわからんのだがなんなの?
rhugをgoogleの日本語サイトから検索すると、このスレが真っ先に目にとまる。
>>225 そんなアレかなあ。SWTって薄いからマルチプラットフォーム
を念頭において実装するときに最下層に持ってきて地ならしするにはいいと
おもうんだけど。
IBMも自社製品でmotif/gtk/qt/win32の上にAWTを実装するのにSWTを
下に敷いてる。
>>223 SwingWT単体で使ったのでちとスレ違いだが、ちょっとだけさわったことがある。
Eclipse VE が吐いたコードを、import宣言だけ変えてコンパイルしてみたが上手くいかなかった。
BoxLayoutが無い、JFrame#setDefaultCloseOperation(int)がない、
など、普段よく使うクラスやメソッドがサポートされて無くてげんなりした覚えがある。
0.84の頃だったかな。
Windows版GCJ
gcjでコンパイルするとランタイム入りでデカくなるというお話ですが 共有ライブラリ化しておけば実行ファイルは小さくなる?
>>223 SwingWT で swing のAPIを使うくらいならそのままSWTを使うかな…
>>228 も書いてるけど足りないメソッド,動作しないメソッドがあって
既存のswingアプリを動かすにはかなり手間かな…
>>230 小さくなるがそのランタイムは7Mくらいあるぞ
まぁJREよりはマシだけど本末転倒だよな
gcjでランタイムをスタティックリンクすると、GPLに感染する?
debianに入ってるjavaのパフォーマンスの良さに驚いた。 実装の名前は忘れたけど。 Cで実装したjarも速くてイカす。
nonfreeじゃなかったからkaffeかgcjくらいしか思いつかないが・・・?
>>235 例外規定なしのバイナリとであれば静的/動的に関わらずリンクしたらGPLに感染する。
例外規定がある場合は例外規定の内容による。
240 :
デフォルトの名無しさん :05/02/08 03:53:37
The rhug project is no longer necessary thanks to the great gcj and GNU Classpath hackers. rhugはobsoletedになったようです。
ばれなきゃなんでもOK
ばれなきゃいいっていう精神的乞食にだけはなりたくないね。
243 :
デフォルトの名無しさん :05/02/08 04:13:43
上の方を見ると例外規定があるおかげで動的静的リンクで感染しないように思うのだが、、
>>243 常に例外規定があるわけではない。
作者はいつ例外規定を書き換えたり無くしたりしても構わないし、
例外規定には「ライブラリを改変した者は改変バージョンの配布時に
例外規定を削っても良い」と明記してある。
「ライブラリを改変〜」ってのは以下の部分。 > If you modify this library, you may extend this exception > to your version of the library, but you are not obligated to do so. > If you do not wish to do so, delete this exception statement > from your version.
なんでGPLの話になると必死なのが沸いてくるんだ?
247 :
デフォルトの名無しさん :05/02/08 16:13:49
そりゃ使おうと思ってるからさ
>>237 今手元にマシンないけどたぶんgcjだった気がする。
パフォーマンスっていうか、立ち上がりがよくて軽快。
ロードしてからだったら計測したらsunの方が上なんだろうけど
オレは起動が速いほうがいい。
fastjar
このスレが立てられて2年と3日、やっと1/4使いきりました。
それでもgcj自体よりは使われてるよう棚
knopix て gcj なのね
なんでIDEが必要なのかがわからん。 便利さがあると思うけど、その分重くなっているのなら意味がないと思うんだよね、僕は。
キリ番なのでAGEます。
キリ番なのでAGEます。 257進数で。
Javaの文法は好きなんだがVMはちょっとなぁ というオレに最適な
>>258 gcj使って単独で動く実行ファイル作ってもVM内臓か外付けか、
の違いしかないと思うが。もしくはGPLマンセーか、Sunが嫌いか、
みたいな政治的(?)な動機とか。
>>259 jreのインストロールさせるのマンドイ
というのも理由のひとつにしようと思っていた。
だが
261 :
デフォルトの名無しさん :2005/04/13(水) 00:36:12
age
jikesもエエヨー
ん?どういうことぉ?
jikes自体はネイティブアプリケーションだけど、gcjみたいにネイティブ コードを吐けるわけじゃないのにな。
>>266 まぁそうだけど…
gcj自体はクラスファイルを生成できるネイティブアプリケーション
でもあるので jikes と競合しているといえなくもない…
# あれ? じゃあ gcj だけでいいじゃんってことにな(ry
>>268 そのニュースソース自体はここ関係ないよ
それを使ってGCJに寄与できるかっていうと、そうは思えないし。
早くSWINGの実装してほしいな。僕には無理だから。
> ニュース-ソース [news source]< > > 情報源。 情報源っつー事は…… Apache Foundation? それとも Harmony の提案があったメーリングリスト?
>>269 本当にやるんなら gcj とか classpath とは競合するだろうから、
少なくともやる気とか競争心の部分で寄与してくれると思うよ。
それに Apache License v2 は GPL より緩いライセンスだから、
gcj とか classpath から見たら、Project Harmony の成果物をパクり放題。
実際にパクるかは別だし、まだ何も無いけど。
274 :
269 :2005/05/11(水) 22:58:57
>>271-273 よくわかってないんだけど、classpathはGCJに含まれているみたいなことをどっかで呼んだんだけど、gcj?(GCC?,GPL?,FSS?)バージョンのclasspathが入ってるってことなの?
別途、classpathをインストロールすればswingとかでアプリ組めるってこと?
>>274 classpathのAWTって確かGTK+ベースのやつしかないんじゃなかったっけ?
276 :
274 :2005/05/11(水) 23:52:33
thx 今、Gnome使ってるからちょうどいいな。 調べてみます。
>>278 例えば(広告条項のない)Apache License 2 ならば、その成果をGPLなソフトに取り込む
のは問題ないよね。そういう意味で互換性のあるライセンスでやる(やってほしい)ってこと
じゃない?
>>279 それだと完全な一方通行になるから share resources とは言わんのでは?
そうだとすると、例外条項って何でもアリになってくるな。 すでに何でもアリになってるけど。
fedora developmentに libswt3-gtk2 というRPMが入っていたので、入れてみたら、 /usr/lib/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar.so というのがインストールされていました。どうもswt.jar のgcjによるsoっぽいんで、 % gcj --main=WindowSample1 -o WindowSample1 /usr/lib/eclipse/plugins/org.eclipse.swt.gtk_3.1.0.jar.so WindowSample1.java としてみたら、ちゃんとリンクができ、実行オブジェクトができました。 でも、 % ./WindowSample1 としたら、 Exception in thread "main" java.lang.LinkageError: unexpected exception during linking: org.eclipse.swt.widgets.Display at java.lang.VMClassLoader.transformException(java.lang.Class, java.lang.Throwable) (/usr/lib/libgcj.so.6.0.0) at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.6.0.0) at java.lang.Class.initializeClass() (/usr/lib/libgcj.so.6.0.0) at WindowSample1.main(java.lang.String[]) (Unknown Source) at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0) at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0) Caused by: java.lang.NullPointerException at java.lang.VMClassLoader.resolveClass(java.lang.Class) (/usr/lib/libgcj.so.6.0.0) となりました。しくしく。そう楽にはいかないの?
-lエクリプス(swt?)が抜けてるのでは? 違ってっても文句は言わずに。
>>284 全然関係なかった。隣家に渡すオプションが必要だった。
あと、やっぱりコンパイル時にジャンプ先を確定しないよう
indirect-dispatchを指定するとか、幾つか工夫がいる。
libgcjやswtをLD_LIBRARY_PATHに通しておいたら、
バイナリのサイズは数十キロだけだし、GTK使ってるから日本語も問題ない。
同じソースで、windowとlinuxでnativeなguiを使ったバイナリが生成できるのは
最強だな。
ネイティブなのに速度ではHot Spotに遠く及ばないという理不尽さをのぞけば最強だ。w
>>286 実行ファイルのイメージがネイティブであるとかないとかってのは速度にあんまし関係ないからねぇ。
Windowsなら(サイズでかくなるけど)ランタイムの配布が不要なのは一応メリットになるが 他のOSではどうなんだろう?
静的にも動的にも結合できるから問題ない。 動的な場合、libgcjをインストールさせればよい。 UNIX系の場合、
ってか Linux や BSD で最近の gcc が入ってれば大抵 libgcj は 入ってるはずだし… メリットは * ランタイム配布が不要 * 起動時間がJREよりは速い くらいか... swt でクライアントアプリケーションやツール系を作るのに使うってのが 無難な(おそらく唯一の)使い道じゃないかな? ゲームとかは… やっぱ C++ や D 言語の方が向いてる気がするなぁ…
>大抵 libgcj は 入ってるはずだし… ところがギッチョン入ってなかったりする
292 :
290 :2005/05/26(木) 14:03:07
>>291 そんな環境もあるかもなー,という気はしてた…
具体的にどの環境で入ってなかったのか晒してくれるとみんな参考になるかも?
293 :
291 :2005/05/26(木) 21:33:46
>>292 ここ数年LinuxのFTP版(無料)のディストロをアップデート期限まで使用しては
乗り換え〃してるからどれがそうだったかははっきり覚えてなけど、
Linuxのディストロによっては元からインスロールイメージに入ってなかったり、
標準ではインストールされないものがあった。
まぁでもソースからインスソールさせればいいのかなぁ。
294 :
290 :2005/05/27(金) 14:43:16
そのディストリビューションは最近のgcc(3以降くらいか?)なんだよねぇ?
古いlibgcjなんかが入ってると、かえって迷惑ってこともあるわな。 現状ではスタティックリンクがお勧めかな。
g++ + boehm GCで書くのとgcjで書くのとでは、パフォーマンス的には同じよーなモノなのでしょーか? 後、バイナリサイズ的にはいかがでしょう。
自分で計れよ。バイナリサイズなんて何を使うかで全然違ってくるだろ。 それからg++ + boehmがJavaのように使えると思ったらかなり間違いだ。
298 :
デフォルトの名無しさん :2005/06/02(木) 21:26:08
Linuxで作って、Windows用バイナリーを作る方法教えてください
1.Linuxで書いて、Windowsでコンパイル 2.Wineでコンパイル 3.Mingwnでコンパイル 4.ソース眺めながら脳内コンパイル
5. バイナリエディタで作る
6. Linux側にクロス環境を構築する。
5は3、6は4と言ってる事たいして変わらんね
逆だった・・・
304 :
298 :2005/06/03(金) 06:43:14
>>301 の6の方法がいいですが、何を準備すればいいでしょう?
と、いうかWindowsは職場にしかなく、Linuxは自宅にしかなく、
会社の規定でWindows側に開発環境を持ち込めないのですが、
どうしてもちょっとしたソフトが必要になっています。
306 :
デフォルトの名無しさん :2005/07/08(金) 21:40:38
gcjでant使えるようにえれーいろいろコンパイルして 動くまでいったらant.exe 32MBでした。以上です
ネイティブ言語なら、動的/共有ライブラリにして外出しされる部分だろうな、サイズを増加させてるのは。
>>306 Fedora Core 4のant-1.6.2-3jpp_10fcだと
/usr/lib/libant-1.6.2.jar.soが3,221,724バイト、
/usr/lib/libant-launcher-1.6.2.jar.soが25,688バイト。
合わせてだいたい32MBくらい?
>306 仰るとおりです。ant, ant-launcherだけだとうまく動きませんで、 足りないのばんばん足してった結果 xerces, bcel, log4j, junit, xalan, ant-nodeps(7割) まで入れちゃって32MBになります。入れたはいいがjunit, xalanは機能しない >307 個々のサイズはant (5,441,802), ant-launcher(51,386)になります そこまで小さいのはできそうにありません 機能しないの取っ払って最適化いじって32MBは9MBまでいきました。 マルチスレッド機能してるしすごいねこれ、9MBあっても普通のより早いと感じる。 gcjいかすね!バグみっけたら俺の園児レベルの英語でばんばんパッチ送っていくぜ
ant.exe+jikes.exeちょっぱやっすよちょっぱや
>76 の作り方教えて欲しい
へいお前さんがた 静的にするには名前集めてもっかいリンクするだけじゃないのかい? うまく作れないけど、ものっそい名前つく _ZN99とかだらけだけどよろしいのかな echo EXPORTS >libgcj.def nm libgcj.a | grep ' T _' | sed 's/^.* T _//' >>libgcj.def dlltool --def libgcj.def --dllname libgcj.dll libgcj.a 最後のdlltoolってばgcj -share とかでも同じ?なんか微妙に違うけど これでdll作ってそっから吐き出すlibgcj.aで置き換えたら完 ってはずだったんだけど参ったぜ、ぶっちゃけるとここでスキル全開なんだ こんな単純じゃない?どうやってこしらえるん
314 :
デフォルトの名無しさん :2005/08/28(日) 15:42:18
Cygwinのgcj使ってるんだけど gcjってSJISのファイル入出力どうやるの? 普通にReader、Writer使って動いてたたclassをEXE化したら 化けて全然使えないんだけど。
>>314 new InputStreamReader(inputstream, "SJIS ");
new OutputStreamWriter(outputstream, "SJIS ");
316 :
314 :2005/08/28(日) 19:28:38
ぬ、 素人だと思って馬鹿にしてるな こちとらUNIX系は素人だけど Javaは1.0のころからやってんだこんちくしょうべらぼうめ。 ていうかおねがいしますよ 助けてくださいよ 普通にjavaコマンドで動かせば問題ないんですよ。 gcj --main=TestMain --classpath=bin -o test.exe bin/TestMain.class ってexeに変換したら全然だめなんですよ。
import java.io.*; import java.util.*; public class TestMain { private static final String WIN_SJIS = "Shift_JIS"; static PrintWriter log; public static void main(String[] args) throws IOException { String inFile, outFile; inFile = args[0]; outFile = args[1]; System.out.println("infile:" + inFile); System.out.println("outfile:" + outFile); OutputStream os = new FileOutputStream("debug.log"); log = new PrintWriter(new OutputStreamWriter(os, WIN_SJIS)); List list = readLines(inFile); writeLines(outFile, list); }
private static void writeLines(String outFile, List list) throws IOException { OutputStream os = new FileOutputStream(outFile); BufferedWriter w = new BufferedWriter(new OutputStreamWriter(os, WIN_SJIS)); Iterator i = list.iterator(); int line = 0; while (i.hasNext()) { String out = (String)i.next(); w.write(out); w.write("\r\n"); w.flush(); line++; if (line % 50 == 0) System.out.println("out:" + line + ":" + out); } w.close(); }
private static List readLines(String inFile) throws IOException { InputStream is = new FileInputStream(inFile); BufferedReader r = new BufferedReader(new InputStreamReader(is, WIN_SJIS)); List list = new LinkedList(); long line = 0; String in; while ((in = r.readLine()) != null) { list.add(in); line++; if (line % 50 == 0) System.out.println("in:" + line); } r.close(); return list; } }
320 :
デフォルトの名無しさん :2005/08/28(日) 19:39:15
>ってexeに変換したら全然だめなんですよ。 当たり前じゃん そこまでネイティブに無料で変換できるのであればJETなど買う奴いない gcjのサポートしているAPIを読め
321 :
314 :2005/08/28(日) 19:48:43
>>320 >当たり前じゃん
>そこまでネイティブに無料で変換できるのであればJETなど買う奴いない
ガーン。
GUIがアレなのは予想できたけど
テキスト処理ONLYのコンソールアプリもダメとは!
>gcjのサポートしているAPIを読め
すんませんリンク教えてください。
ant.exe作ってからこつこつ知識をつけてきた俺がお答え、 できませんスキルの関係でもうしばらくお待ちください。 自分はウィンだと痒いところに手が、いや痒いところに対して全然手が足りない状態だったので kernel2.6と駆け落ちしています。 コツはね、jarをいっきにいかずばらして全部コンパイルして そんで一回まとめて ar cur libtest.a *.o gcj --classpath=.:test.jar --main=Main Main.o -ltest ってのが俺はすんなりいった
323 :
デフォルトの名無しさん :2005/08/28(日) 20:04:33
>libgcjは、 JDK 1.2ライブラリとおおむね互換性があります。 >しかし、 libgcjには欠けているパッケージも数多くあります。 >これは、 java.awtにおいて特に顕著です。個々のクラスやメソッドで欠けているものもあります。 >現在のところ、 libgcjとJava 2プラットフォームの相違点を一覧にしたものはありません。 ちょっと待ってくれよ、そこまでコンパイルオプション知っていて尚且つJava暦長いのなら GCJのDoc当然読んでいると思ったよ
324 :
デフォルトの名無しさん :2005/08/28(日) 20:05:33
>現在のところ、 libgcjとJava 2プラットフォームの相違点を一覧にしたものはありません。 ↑これが重要で しかも[悪]
libgcj.aからSJIS周りの.oファイルを取り出して直接リンク。 ところでそれ、テストソースになってない。どこでなにがどう 化けているか確認できないだろ。
326 :
314 :2005/08/28(日) 20:28:28
>>323 いや、俺もそこは読んだけど
AWTは互換性あんまないけど他はけっこういけるんじゃないかと思ったのさ
(甘かったけど)
>相違点を一覧にしたものはありません。
うーん。
>どこでなにがどう化けているか確認できないだろ。
ファイル出力もだめだしSystem.outでコンソールに出しても化け化けでどうにも、、
unicodeをダンプするべきだったすね。
327 :
デフォルトの名無しさん :2005/08/28(日) 20:51:10
(new InputStreamReader(is, WIN_SJIS)); がダメなら バイトで読み込んでそのままバイトで出すとどうなる? そうすれば、少なくともWin環境ではコンソールで化けないとおもう
皆使ってんのか!??俺だけじゃねーのか?とか思ってたぞ これ作ってみバイナリサイズも実行速度も文句ないと思うよ 依存もないし unzip javacc-3.2.jar for cls in `find|grep *.class`; do gcj -g -O2 --classpath=. -c -o ${cls%class}o $cls done gcj -g -O2 --classpath=. --main=javacc -o javacc javacc.o org/javacc/parser/*.o 他ねーの??
>>326 最低限
String s1 = "\u3042";
System.out.println(s1);
System.out.write(s1.getBytes("Shift_JIS"));
System.out.println();
System.out.println(System.getProperty("user.language"));
System.out.println(System.getProperty("file.encoding"));
これくらいの情報はないとね。
それ動くか試してないから手直必須 あと org/javacc/parser/Version.oも入れる
329にちょっと追加してみた。 String s1 = "\u3042"; System.out.println(s1); System.out.write(s1.getBytes("Shift_JIS")); System.out.println(); System.out.println(System.getProperty("user.language")); System.out.println(System.getProperty("file.encoding")); OutputStreamWriter ow = new OutputStreamWriter(System.out, "Shift_JIS"); ow.write(s1 + "\r\n"); ow.close(); $ gcj --main=Test Test.java $ ./a.exe ? あ en 8859_1 あ $ gcj --version gcj (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125) 一行目が文字化けするのはfile.encodingが違うからだけど、 5行目からちゃんと明示的に指定すれば文字化けしないことがわかる。 入力系は見てないけど同じような感じで確認してみたら?
# gcj -g -O2 --main=Test --classpath=. Test.java Input_SJIS.o Input_EUCJIS.o Input_UTF8.o Input_iconv.o Output_SJIS.o Output_EUCJIS.o Output_UTF8.o Output_iconv.o # ./a ? あ en 8859_1 あ eucにしたらなったぜ!
334 :
デフォルトの名無しさん :2005/08/28(日) 22:26:04
335 :
314 :2005/08/28(日) 23:04:58
おかげさまで
>>332 の方法で上手くいったっす。
皆さんありがとうごさいます。
#ていうかリンカオプションとかその辺の問題?
336 :
314 :2005/08/28(日) 23:15:48
#サポートしてるエンコード全部リンクするのをよしとしない気持ちもわかるけど #リンクオプションみたいなので指定させてくれてもいいかなと思った。
いろいろ試した限り cygwin の gcj より MinGW 4.1 の gcj の方がずっといい感じ… libiconvを追加でインストールする必要があるのが面倒だけど, ソースコードのエンコーディングを gcj --encoding=utf-8 とかで指定できるし Reader,Writerのエンコーディングも上みたいに面倒なことしなくても使えるっぽいよ?
>>335 Linuxのgcjですが、
gcc バージョン 4.0.2 20050913 (prerelease) (Debian 4.0.1-7)
$ cat Test.java# これはdefault encodingのEUC-JPで書かれている。
public class Test{
public static void main(String args[]){
System.out.println("日本語表示のテスト");
}
}
$ gcj --main=Test Test.java
$ ./a.out
日本語表示のテスト# EUC-JPで出力されている
$ ./a.out | hexdump -C# 確認
00000000 c6 fc cb dc b8 ec c9 bd bc a8 a4 ce a5 c6 a5 b9 |................|
00000010 a5 c8 0a |...|
$ gcj -Dfile.encoding=SJIS --main=Test Test.java
$ ./a.out | hexdump -C
00000000 93 fa 96 7b 8c ea 95 5c 8e a6 82 cc 83 65 83 58 |...{...\.....e.X|
00000010 83 67 0a |.g.|
で何の問題もなし。出力はちゃんとSJISになっている。
それから
>>332 のページ、
> 日本語をそのままJavaの内部コードのUTF-8で出力したからです
って書いているけれど、内部はUCS-2だから、
default I/O encodingの間違いだね。
>>338 ちなみにプロパティはコンパイル時に指定する以外に
環境変数GCJ_PROPERTIESで設定することもできる.
$ env GCJ_PROPERTIES="file.encoding=SJIS" ./a.out
みたいに走らすと出力がShift_JISになるはず(gcj3.3.2 on linux にて確認)
342 :
デフォルトの名無しさん :2005/09/30(金) 11:55:21
gcj便利なのですがコンパイルする度にすごい時間がかかりますよね。 そこでjavacのようにclassファイルをハードディスクに保存させ、 次回のコンパイル時にはそれを再利用して速度を上げるようなことはできますか? javacだと変更箇所だけをコンパイルし直すので時間の節約になります。
343 :
デフォルトの名無しさん :2005/09/30(金) 12:35:06
すみません、説明不足でした。 質問したかったことは .class ファイルから生成した .o ファイルなどのようなバイナリを ハードディスクに保存させる方法です。
-c
345 :
デフォルトの名無しさん :2005/09/30(金) 13:05:01
>>344 どうもありがとうございます。うまくいきました!
もう一つ質問させて下さい。
jniのdllファイルをリンクしてコンパイルするには以下のような構文でOKでしょうか。
gcj -o Hoge.exe --main=com.hoge.Main Hoge.java Hoge.dll
Hoge.java のソースでは System.loadLibrary をコメントアウトして
private static final native long getHoge();
という宣言が書いてあります。
minGWでcj使おうと思ったら gcj: installation problem, cannot exec `cc1': No such file or directory なんて表示された。解決策分かる人いませんか
>>347 ありがと〜gcc-coreのインストしわすれでした。変なところでつまずいてしもた。
349 :
デフォルトの名無しさん :2005/10/03(月) 19:03:28
Java 1.3.1 で問題なく動いているソースを gcj 3.4.4 でコンパイルしました。 いざ実行すると次の例外をはいて終了してしまいます。 java.lang.NullPointerException <<No stacktrace available>> java.lang.ExceptionInInitializerError <<No stacktrace available>> Caused by: java.lang.RuntimeException <<No stacktrace available>> エラーの発生箇所がつかめないので、スタックトレースを表示させたいのですが可能でしょうか? それ以外に原因となっている箇所を特定する方法はあるのでしょうか?
出ない?シンボル消したとかじゃなくて出ない?
>>350 No stack trace availableと表示されて、本物が出ないです。。
gcj で使ったオプションは -fjni -O3 です、、、
どうやればよいのやら。
javacのほうはgenerate debugging symbolsを有効にしてあります。
354 :
デフォルトの名無しさん :2005/10/03(月) 21:59:02
だめです、、、トホホ。 ここでMain.mainを指定しても認識できませんでした。 やりなれたスタックトレースをつかったデバッグができないのはつらいです。 (gdb) break Main.main Can't find member of namespace, class, struct, or union named "Main.main" Hint: try 'Main.main<TAB> or 'Main.main<ESC-?> (Note leading single quote.) (gdb)
javacがでてくるのが不思議なんだが、もしかしてjavacでいちいちクラスファイル を生成させてからgcjでAOTコンパイルさせているのかな?
こちらXcodeというIDEを使っていましてjavacが使われています。 通常はjarファイルにパッケージして使っています。 そのjarファイルをgcjでコンパイルできるようになればいいのですが、
OSXかあ、なんか違うのかな? 手元だと、linux gcj-3.3 or 3.4 でやっても winのgcj-3.4でも、 両方linuxでコンパイルだけどスタックトレースでるよ 当然なんだろうけどシンボル消しちゃうと出ないね、upxでも出なくなる No stack trace availableはでない、stripかけると at 0x004c924e (Unknown Source) at 0x004c9742 (Unknown Source) ずらーっと単純に表記が番地にかわるだけでスタックトレースは機能はしてる そのメッセージ見たことない XCODEって無茶苦茶ハンサムなIDEだね
>>357 ありがとうございます。
一応、普通のjavaで起動して動作確認してみたところスタックトレースは表示されます。
なのでjarファイルの中のシンボルは消されていないようです。
問題なのはgcj で書き出しだ.oバイナリです。
コンパイル時に何らかのオプションをつけてシンボルを消さないようにする必要があるのでしょうか?
念のため windows の mingw の gcj 3.4.4 でもコンパイルしてみましたが症状は変わらずじまいです。
>>358 Xcodeとの連携や最適化は後で考えろ
とにかく今はXcodeのことはいったん棚に上げて
javacのclassファイルを使わずにjavaソースを直接gcjにかけろ
-gオプションを付け忘れるな
とりあえず最適化(-O3)はやめとけ
慌 て る 乞 食 は 貰 い が 少 な い
出ない? public class A { public static void main(String[] argv) { try { argv[10] = null; } catch (Exception e) { e.printStackTrace(); } } } この A.java を保存してカレントで gcj --classpath=. --main=A -o A A.java ./AとかA.exeとかで出るはずだけど、もし、こゆー事じゃないの?
361 :
デフォルトの名無しさん :2005/10/04(火) 21:38:39
>>360 氏の助言を参考にA.javaをコンパイルしてみましたが、、、
user:~/gcj user$ /usr/local/bin/gcj --classpath=. --main=A A.java
/usr/bin/ld: warning multiple definitions of symbol _sqrt
/usr/local/lib/gcc/powerpc-apple-darwin7.9.0/3.4.4/../../../libgcj.dylib(libgcj.5.0.0.dylib-master.o) definition of _sqrt
/usr/lib/libm.dylib(sqrt970.o) definition of _sqrt
/usr/bin/ld: warning multiple definitions of symbol _fabsf
/usr/local/lib/gcc/powerpc-apple-darwin7.9.0/3.4.4/../../../libgcj.dylib(libgcj.5.0.0.dylib-master.o) definition of _fabsf
/usr/lib/libm.dylib(fabs.o) definition of _fabsf
/usr/bin/ld: warning multiple definitions of symbol _fabs
/usr/local/lib/gcc/powerpc-apple-darwin7.9.0/3.4.4/../../../libgcj.dylib(libgcj.5.0.0.dylib-master.o) definition of _fabs
/usr/lib/libm.dylib(fabs.o) definition of _fabs
/usr/bin/ld: warning multiple definitions of symbol _scalbn
/usr/local/lib/gcc/powerpc-apple-darwin7.9.0/3.4.4/../../../libgcj.dylib(libgcj.5.0.0.dylib-master.o) definition of _scalbn
/usr/lib/libm.dylib(scalb.o) definition of _scalbn
と何やらエラーらしき物が表示され
user:~/gcj user$ ./a.out
java.lang.ArrayIndexOutOfBoundsException: 10
<<No stacktrace available>>
起動しても同様にスッタクトレースが表示されませんでした。
-g オプションをつけて、作業中のjavaソースを直接コンパイルしても同様の結果でした。
Darwin(Mac OS X)は、バイナリ実行形式がELFじゃなくて、Mach-Oだからなあ。 まだgcjのportingが十分じゃないんでしょ。 Mach-Oのせいでいろいろポーティングが遅れるんだなあ… ELFにすべきだったと思うよ。
それは言える。
364 :
デフォルトの名無しさん :2005/10/07(金) 21:24:41
MinGwのサイトにlibiconvのPORT版のファイルがありますよね。 それをコンパイルしてインストールしたいのですが 手順が解説されているサイトなどご存知ありませんか。 gcjを使おうとするとiconvが必要といわれます。
365 :
デフォルトの名無しさん :2005/10/08(土) 01:48:06
スレ違いだけど、 Max OS XをELFにしてたら、ファットバイナリの仕組が作り直しだから、 PowerPCからIntelへの乗り換えのハードルが高くなったず。
>>365 アプリケーションバンドルの実体ってフォルダだから、その気になれば
なんとでもなる気はするけどね。
なんじゃこれ
370 :
364 :2005/10/08(土) 09:19:17
>>367 親切な方、どうもありがとうございます。
コンパイル済みのバイナリでやってみます。
371 :
364 :2005/10/08(土) 11:01:33
コンパイル済みバイナリを c:\mingw\usrに展開し、 set PATH=C:\mingw\bin;C:\mingw\mingw32\bin;C:\mingw\usr\local\bin;C:\mingw\usr\local\lib としました。 しかしコンパイルを実行しようとすると -liconv がないといわれてしまいます。 C:\mingw\bin\..\lib\gcc\mingw32\3.4.4\..\..\..\..\mingw32\bin\ld.exe: cannot find -liconv collect2: ld returned 1 exit status liconv とlibiconvは違うものなのでしょうか? それともインストールの仕方が間違っているのでしょうか。 詳しい方が居ましたらご指摘お願いします。
リンカがちゃんと見つけられるようにしてる?
373 :
364 :2005/10/08(土) 12:49:52
>>372 様
リンカのことがよくわからなかったのですが、パスが通っていないのかなと思い、
c:¥mingw¥usr¥localフォルダの中身をみていましたら
階層構造がc:¥mingw とそっくりなことに気づき、
そのまま local フォルダの中身をc:¥mingwに上書きコピーしたところちゃんと認識できるようになりました。
強引な気もします。
374 :
364 :2005/10/12(水) 22:56:08
mingw版のgcjのバージョン4.0〜をコンパイル済みで配布しているサイトをご存知の方いませんか?
375 :
364 :2005/10/12(水) 23:00:26
javacc.jar 878,719 byte gcj -s -O2 upx javacc.exe 878,080 byte やるーーー
保守
380 :
デフォルトの名無しさん :2006/01/04(水) 13:36:01
>>378 なんかいまいちわかんなかったよ
dbtoolとか共有ライブラリの扱いかたとか
381 :
デフォルトの名無しさん :2006/01/04(水) 18:37:12
http://www.tosu.org/download/numberplace.htmlから ソースを持ってきて、
gcj --main=suudoku.Main -o suudoku.exe suudoku/*.javaとコンパイルして
実行した時と、jdkでコンパイルして実行した時で挙動が違います。
具体的には、ウインドウ上の4と7が、gcjの時だけ、3と6と表示されます。
jdkでは、書いてある通り出ます。
なんか計算ミスがあるのでしょうか?
$ gcj --version
gcj (GCC) 3.4.4 20050721 (Red Hat 3.4.4-2)
$ java -version
java version "1.5.0_03"
382 :
デフォルトの名無しさん :2006/01/04(水) 18:47:03
383 :
デフォルトの名無しさん :2006/01/04(水) 21:23:11
>>382 指定しなければ、今、稼働してるマシン用のものが指定されてることにならないんでしょうか?
ちなみに、クルーソーの700MHz使ってます。
385 :
デフォルトの名無しさん :2006/01/12(木) 08:12:28
>>381 自然対数LOGを求めて、2を底とする対数を計算してるが、
jdkでは4になるところが、gcjでは3.99999999996になる。
t=Double(Math.log(x)/Math.log(2))
この式で、x=10000ならば、t=4となるはず。
しかし、t=3.99999999。。。となる。
暫定策としては、tに0.00001を加えてやればよいのだが?
386 :
デフォルトの名無しさん :2006/01/12(木) 08:54:33
strictfp 使った上に、 StrictMath.log() 使っても改善されない? あと、4になるのは log(10000) じゃないか?
2が底だからt=4になるのはx=16だろ。
実は10000は二進法で表現されてたんだよ。 無理っぽいか。 3.99999999 とか十進法使ってるし。
SunのJava作った奴等もIEEE 754分かってないよなあ 何故数値計算の専門家を入れとかなかったのかと…
うんこ
http://page.freett.com/gikob/gcj/gcjswt.html 上記ページを参考に、SWT.jar から swt.o を生成しようとした時に、
エラーメッセージが大量に出て苦しんでおります。どなたがご慈悲を……
環境
WindowsXP
SWT3.1.1 / SWT3.0.2 (両方試す)
gcc-java-3.4.5 / gcc-java-3.4.2 (両方試す)
gcc-core-3.4.5
binutils-2.15.91
w32api-3.5
mingw-runtime-3.9
gcc-g++-3.4.2
gcj --jni -c --classpath=swt.jar swt.jar
org/eclipse/swt/dnd/RTFTransfer.java:97: error: verification error at PC=198
org/eclipse/swt/dnd/RTFTransfer.java:97: error: might transfer control into subr
outine
org/eclipse/swt/dnd/TextTransfer.java: In class `org.eclipse.swt.dnd.TextTransfe
r':
org/eclipse/swt/dnd/TextTransfer.java: In method `org.eclipse.swt.dnd.TextTransf
er.nativeToJava(org.eclipse.swt.dnd.TransferData)':
org/eclipse/swt/dnd/TextTransfer.java:119: error: verification error at PC=348
org/eclipse/swt/dnd/TextTransfer.java:119: error: might transfer control into su
broutine
最近、 gcj --main=Hello --classpath=/usr/share/java/libgcj-4.0.2.jar Hello.java ってクラスパス明示的に指定する必要があるのね。
>>394 それです。ありがとうございます。
って、
> Unfortunately, this is a gcj bug.
ですか
ちなみに、どなたかSWT3.1で、SWT.jar → SWT.o の変換を成功された方っていますか?
gcj-4.0.2 on Linuxなら全く問題なし。
>>396 ソースコンパイルしろって書いてあるように見えるけど。
401 :
393 :2006/01/17(火) 01:18:19
情報ありがとうございます。助かりました。
とりあえず、SWT2.1.3で動作しました。
>>399 様、ありがとうございます。
今日はあまり時間が取れなかったので、ソースコンパイルと、
>>400 様の方法も
明日以降、やってみようと思います。
402 :
デフォルトの名無しさん :2006/02/12(日) 01:01:59
普通に訊いてるのにそんな意地悪な答えするなよ
????普通に訊いてる????
>>404 言語障害わずらってるといろいろ大変だね。
頑張れ。
>>402 はこのスレ住人には触れられてはならない事のようだな。
はいはい
409 :
デフォルトの名無しさん :2006/02/19(日) 00:56:42
CygwinでCGJを使ってみたんですが、 ただのHello Worldプログラムが4MBにもなってしまいます。 なんとかなりませんか?
strip した?
ただのHello WorldくらいCで書け。
なんて事を言うんだお前は
413 :
デフォルトの名無しさん :2006/02/19(日) 16:08:09
ただのHelloWorldくらいならアセンブラの方が早いと思う
つっこみどころが違う。なぜ Hello World を書くのか考えろ。 いちいち書く気もしないからスルーしてたのに・・・。
>>414 > なぜ Hello World を書くのか考えろ。
挨拶のためじゃないのか?
Beagleってディスクトップ検索のツールは、Luceneって検索エンジン使っている。 これは元々Javaで書かれていたけれど、 Beagleの使っているのは、C#にポートしたdotLucene。だからmonoが必要。 これってどうよ? > gcj
gcjの例外機構ってc++とはなんか違うよね? どやって実装してんのか知ってる?
一緒だよ。 セマンティクスがほんの少し違うだけ。特に静的なセマンティクス。
>>402 gcj以外に
JavaをEXEにできる
タダの変換プログラムが
あれば乗り換えたいです。
性能はあまり問いません
日本語処理がまともならば。
日本語処理まともじゃん
「日本語処理がまとも」の定義がないとなんとも。
cygwin の gcj はダメポだがそれ以外の環境ではまともだと思うけどなぁ…
問題点の指摘がない→まとも って進行でいいんじゃない?
失礼します、初心者です。 Cygwin入れてSWTやろうとしましたが、 エラーを見るとどうもSWT.jarを読めていないようで… SWT.jarの置き場所が間違ってるような気がします。どこに置いたらいいんでしょうか?
--classpath=パス名で指定しろよ。
>>425 classpath指定すると
undefined reference to hoge…
というのが大量に出るようになりますた。
必要なところは全部指定しろよ。
428 :
424 :2006/04/19(水) 21:22:43
よくわからないので、mingwにして、やろうとしてます。
http://page.freett.com/gikob/gcj/gcjswt.html を参考にして、とりあえずswt.oを作ろうとしていますがうまくいきません。
org/eclipse/swt.cnc/RTFTransfer.java:97: error: verification error at PC=198
org/eclipse/swt.cnc/RTFTransfer.java:97: error: might transfer control into subroutine
・
・
・
などなど、大量のエラーが出ています。
なにがおかしいのでしょうか。
えっと、mingwで単なるHelloWorldを表示するプログラムからやり直していますが、
cannot find -liconv
というエラーが出るようになりました
>>429 さらにわからなくなりますた
>>430 MinGW の gcj でコンパイルしてできたファイルは libiconv に依存する.
gcj 使う前にまず iconv をビルドしてインストールするかコンパイル済みの
バイナリを拾ってきてインストールしれ.その後 HelloWorld.
432 :
424 :2006/04/20(木) 20:40:54
とりあえず、現状を。 MinGWインストーラー付きをインストール libiconvをインストーラー付きでインストール cannot find -liconvのエラーは変わらず どーしよーもなくなってます・・・。
gcj の GC 部分って Boehm GC 使ってるのかな?
うんそうだよ
運送ですか…
だれかお暇なら gcj で例えばどういうコードがコンパイルできないのか教えてください。 将来的にもあらゆる java コードに対応するのは原理的に無理そうってことでいんでしたっけ?
>>438 JAVAが進化する限りにおいて、gcjは、完全にJAVAに追い付くことはできない。
原理主義者は大変だな。w
実際のところ言語仕様やVM仕様には追い付けるだろうけれど, 無駄に増え続けるクラスライブラリに完全に追い付くことはないだろうな… もし追いつくとしたらJavaを使う人がいなくなってJavaの肥大化が止った時だろう… # ぶっちゃけいらないパッケージばっかりなんだよな…
SunはほとんどOpenSourceにするみたいだから、 コンパイルすればいいだけじゃない?
gcc-4.1.1 make create-headers make[6]: Entering directory `/hoge/gcc-4.1.1/arm-elf/thumb/libjava' name=`echo classpath/lib/gnu/awt/LightweightRedirector.class | sed -e 's/\.class$//' -e 's,classpath/lib/,,'`; \ /hoge/gcc-4.1.1/mkinstalldirs `dirname $name`; \ arm-elf-gcjh -d . -classpath '' -bootclasspath classpath/lib $name /bin/sh: arm-elf-gcjh: command not found make[6]: *** [gnu/awt/LightweightRedirector.h] エラー 127 ええー。
最近はエラーメッセージが読めない奴でもコンパイルするのか
>>446 いや、gcjh のビルドすんでないのに使おうとしてエラー出るんだよ。
448 :
33 :2006/06/16(金) 14:56:50
gcjでマニフェストファイルを含んだjarファイルをネイティブコードにするには、どのようにしたらいいのでしょうか?
C:\> unzip そのjar C:\> cat マニフェスト C:\> gcj --main=メイン *.java
451 :
448 :2006/06/19(月) 18:49:08
452 :
デフォルトの名無しさん :2006/07/03(月) 08:20:41
gcjって何ですか?
GNU Compiler for Java の略だっけ?
当方Windows2000を使用しております。 NetBeansからgcjを使うにはどうすればいいでしょうか? 一応MinGWでコマンドラインからgcjを利用できるようにはしてあります。
457 :
デフォルトの名無しさん :2006/08/01(火) 18:29:51 BE:176097672-2BP(10)
すみません、どんなソースコンパイルしてもこんなの出てくるんですけれど。 /mingw/lib/libmingw32.a(main.o):main.c:(.text+0x106): undefined reference to `WinMain@16' collect2: ld returned 1 exit status ぐぐってみたりしたんですが、C言語の場合の解決方法しか載ってないんです。 これってどうすればいいんでしょう? 環境はWindowsXP+MinGW gcjです。
>>458 >>459 ありがとう。そうか、main指定が必要だったのか・・・
われながらこんな簡単なところでコケるとは情けない・・・・
461 :
デフォルトの名無しさん :2006/08/04(金) 21:38:16
462 :
デフォルトの名無しさん :2006/08/14(月) 11:47:12
mingw の最新のgcj 3.4.5でgcj 4.2.0からもってきたlibgcj-4.2.0.jarを libgcj-3.4.5.jarと差し替えて使用することはできますか?
464 :
デフォルトの名無しさん :2006/10/05(木) 22:38:39
>>461 いいねぇ。なかなか使えるよ。UPXでアホみたいに小さくなるし。
GCJでJNIだけど、VisualStudioで作ったDLLは駄目?jvm.dll使わないようにすれば動くかなぁ?
今のところ、jvm.dllを要求されてしまったので、うまくロードできてません。
Direct3DやDirectShowを使ってしまったので、GCCでコンパイルするの面倒かと思って。
UPXで小さくしたところで、メモリ上に展開される量はかわらんだろ。
>>444 世代別GCだけでもGPLと矛盾しないライセンスで出してくれー>Sun
#今はBoehm GCがgcjの足ひっぱってる気がしてならない
>>466 完全にストップ&ゴーするしねぇ…
しかし足を引っ張ってるものは他にもいっぱいありそうだしなぁ…
いっそクラスライブラリも全部 Sun 製のやつに(ry
javaCompiler-0.8 で自作 swt アプリをコンパイルして実行しようとしています。
無事コンパイルでき実行すると、
class.forName() を使っているためか、NoClassDefFoundError になります。
classを動的にロードするための設定が必要なのでしょうか?
exe実行のディレクトリー配下に classファイル(jp\xxx\Test.class)は置いてあります。
CLASSPATHにも指定してみました。
http://www.shudo.net/article/Fedora-Core-Expert-200507-GCJ/ プログラム実行中にClass.forName("クラス名")などとして
クラスファイルのままのクラスをロード・実行することもできます。
その場合、ロードされたクラスはインタプリタで実行されます。
とあります。
エラーメッセージは下記です。
Exception in thread "main" java.lang.NoClassDefFoundError: jp.xxx.Test
at java.lang.Class.initializeClass(Main-win.exe)
at java.lang.Class.initializeClass(Main-win.exe)
at java.lang.Class.forName(Main-win.exe)
Caused by: java.lang.ClassNotFoundException: org.xml.sax.SAXException not found
in gnu.gcj.runtime.SystemClassLoader{urls=[file:.\], parent=gnu.gcj.runtime.Exte
nsionClassLoader{urls=[], parent=null}}
at java.lang.Class.initializeClass(Main-win.exe)
...2 more
org.xml.sax パッケージがリンクされてないみたいです。 リンクするにはどうすればいいのかな? gcj でコマンドラインでやりはじめています。
新しい・・・
gcj の開発者な人達は今後どう動くのかねぇ?
ネイティブコンパイラに
474 :
デフォルトの名無しさん :2007/01/07(日) 20:55:29
thisiscoolのgcjで簡単なswtアプリを作ると バイナリサイズが17MB 実行時にメモリを32MB使用する こんなもんか?
-Os -Wl,--strip-all で縮まんならあきらめるしかないね
>>475 サンクスコ
縮まらなかった。
常駐するようなアプリは無理だなこりゃ。
4Gのメモリにとってどれくらいの割合か考えてみよう
君は実に馬鹿だな
馬鹿は実に君だな
480 :
デフォルトの名無しさん :2007/01/11(木) 13:14:21
はいはい
全部が「常駐」するわけじゃないし、JREインストールしてもそのくらいストレージは食うし、 実用上はあまり問題ない。問題となるのは「常駐するようなアプリ」ではなく、同じような アプリが複数起動されたときの無駄だと思う。
上の Java Compiler に入ってる strip.exe で20Mが4Mくらいになるよな。8Mくらいだっけ?
>>482 --strip-all 付きで生成したバイナリも小さくなるっけ?
最適化しようとするとリフレクション&クラスローダー関連が癌だよな 動的プログラミングを静的なバイナリに置き換える事自体が問題なんだろうけど。
でもたいていそんな変わったコードはコンパイル不可だから。 っていうか、ちょっと複雑なライブラリーつかうと不可。
要するにgcj使うメリットって何もないよね
488 :
デフォルトの名無しさん :2007/01/21(日) 00:09:43
January 8, 2007 Andrew Haley and Tom Tromey of Red Hat merged the gcj-eclipse branch to svn trunk. GCC now uses the Eclipse compiler as a front end, enabling all 1.5 language features. This merge also brings in a new, generics-enabled version of Classpath, including some new tools. All this will appear in GCC 4.3.
これMakefile作れないの?
cygwinのgcjで作った.exeの巨大さを見て愕然とする。linuxだとそうでもないのに。 思うに、ライブラリをスタティックリンクしているんだろうか? ダイナミックリンクにする方法は?
>>490 そ、そうかな?
linux でのバイナリサイズも大きくてびっくりしたよ。
CygwinかLinuxかという問題ではなく、単にバージョンの問題だったりして。 Linuxも以前は大きかった記憶がある。
>>490 cygwin mingw だと libgcj のDLLが用意されてなくてかならずスタティックリンクされる。
リフレクションによるDLLからの動的クラスロードとかもできないしwin32環境のgcjはまだまだ。
GCJに入ってるJavaのライブラリと、対応するJavaのバージョンってどこで調べられますか?
以下のソースをコンパイルすると、例外が出て動かないんですが、原因の分かる方いませんか? public class test { public static void main(String[] arguments) throws Exception { String s = "aaa123bbb"; s = s.replaceAll("[a-z]", "hoge"); System.out.println(s); } }
496 :
495 :2007/04/19(木) 13:13:57
環境は、mingw gcjの、3.4.2と4.3.0で試しました。 例外は次のように出ました。 Exception in thread "main" java.lang.ExceptionInInitializerError at java.lang.Class.initializeClass(/datal/gcc/gcc/libjava/java/lang/Object.java:513) at gnu.java.util.regex.RE.getLocalizedMessage(/datal/gcc/gcc/libjava/classpath/gnu/java/util/regex/RE.java:262) at gnu.java.util.regex.RESyntax.<clinit>(/datal/gcc/gcc/libjava/classpath/gnu/java/util/regex/RESyntax.java:345) at java.lang.Class.initializeClass(/datal/gcc/gcc/libjava/java/lang/Object.java:513) at java.util.regex.Pattern.<init>(/datal/gcc/gcc/libjava/classpath/java/util/regex/Pattern.java:76) at java.util.regex.Pattern.compile(/datal/gcc/gcc/libjava/classpath/java/util/regex/Pattern.java:153) at java.util.regex.Pattern.compile(/datal/gcc/gcc/libjava/classpath/java/util/regex/Pattern.java:135) at java.lang.String.replaceAll(/datal/gcc/gcc/libjava/java/lang/String.java:998) at test.main(D:/workspace/Test/src/test.java:0) Caused by: java.util.MissingResourceException: Bundle gnu/java/util/regex/MessagesBundle not found at java.util.ResourceBundle.getBundle(/datal/gcc/gcc/libjava/java/util/ResourceBundle.java:372) at java.util.ResourceBundle.getBundle(/datal/gcc/gcc/libjava/java/util/ResourceBundle.java:243) at gnu.java.util.regex.RE.<clinit>(/datal/gcc/gcc/libjava/classpath/gnu/java/util/regex/RE.java:133) at java.lang.Class.initializeClass(/datal/gcc/gcc/libjava/java/lang/Object.java:513) ...8 more
497 :
デフォルトの名無しさん :2007/06/25(月) 20:28:45
499 :
デフォルトの名無しさん :2007/09/26(水) 11:56:27
mingw の gcj 使っているのですが,gcjでコンパイルされた静的ライブラリをリンクする時に 静的ライブラリ内の特定のオブジェクトファイルを強制的にリンクする方法ってないでしょうか? 静的ライブラリ内にあるメッセージリソースをコンパイルしたものがライブラリ内のクラスから ResourceBundle#getResource() で参照されているのですが普通にリンクしても 当然このオブジェクトはアプリケーションにリンクされません. なにかうまい方法はないでしょうか?
500 :
デフォルトの名無しさん :2007/10/05(金) 14:04:56
500get!
>>498 ネイティブ呼び出してるの以外はSunのそのまま使えばいけそうなもんだけど
そういうわけにはいかないのかね
今後標準クラスライブラリはどうするのかねー? GNU classpath を継続して使い続けるのかな?
差し換えられるようにする方向じゃないのかなあ。
ま、とにかくGNUの精神なんて末端には関係ないんで6が動くの早く出してくださいよ
フロントエンドのecj化でコンパイラだけなら動くようになるんじゃね?
CGJを使ってみようと思って対応状況を見てみたんだけど、 awtやらswingのコードは全てをカバーしておらずまだ実用には向かないと書いてある。 これ、どういうこと? SunのJDKの中にはawtやらswingやらのclass全てのファイルが入っているのに、 それを使わず、すべて自分たちで一から書き直しているということ?? もしそうなんだとしたら、開発者には悪いけどこんなアホなことは無いなあ。 既存のコードを有効利用しない(できない?)で車輪の再発明を延々と繰り返すって 一体全体どうなの。 なんだか非常に的外れな事を言っている気がどんどんしてきた。 間違っていたら教えてください。
非常に的外れだが間違っているとは言えないね。w 大人の事情というものがあるのだよ。
>>506 少なくとも今迄はできなかった
SunのJDKがGPLになった(まだ全部じゃなけど)からこれからは有効利用できるはず
でも実際にSunのJDKを利用するかどうかは作ってるやつらに聞いてくれ
libgcjってGPL例外条項があるけど、サンのライセンスと適合するん?
ふむふむ、分かったぞ。 どうやら二つの問題をあわせ持っているみたいだ。 一つは標準APIの問題。 Sunはそれの流用を禁止していたので、新しいJava実装の開発は標準ライブラリが使えない為難しかった。 そこで登場したのがGNU Classpathって団体で、彼らはSunJDKのAPI仕様書を見ながらせっせとフリーな実装を作った。 この頃Sunにはソースコードをオープンにしようとする動きがあり、この問題は解決の方向へ向かっている。 これ、面白いなあw GNU Classpathにとってこれは喜ばしいことなんだろうけど、今までの苦労が水の泡じゃないかw んーでもまあSunが公開に踏み出したのには彼らの影響もあるのかな。 んでもう一つの問題がネイティブコードに変換する時の問題。 Javaをプレステの実機とおけば、GCJはPCで動くエミュレータみたいなもので swingで使われているコードにはまだ再現できない所もあるいうことみたいだ。 なんだか日記みたいになってしまったけど、すっきりしました。 みなさんレスありがとうございました。
gcj + Sun class libraryってprojectもあるよ。 けどgcjの中の人たちは、classpathがかなり仕上がってきているから、 そっちの方に重きを置いている人が多い。 二年前にSunがソース公開していたら、状況は違ったと思うけれど。 いずれにせよ、ちゃんとした成果がないことを嘆くのはまだ早い。
gcj試してみたけどちょっとしたプログラムでも動作が怪しい。 同じプログラムをExcelsior JETで変換するとすんなり動いた。 やはり商用には敵わないか・・・ JETの購入真剣に検討してみるかな。
↑工作員っぽくてかっこいい
少なくとも Eclipse という gcj でコンパイルでき、 動作もする大きなパッケージがある訳で。
Excelsior を使いたい状況って何なんだろう・・・ 最近じゃ無くなってきてないですかね? JREの導入も簡単になってきてるし・・・・ それでもいやなときは、gcjというフリーな解があるのであって・・・ 仕事でやるときは、JRE入れるのが安全だもんなぁ
gcj じゃ Excelsior の代りにはならんだろ… Java5未対応だし,使えないAPIが山ほどあるし(Win32環境だと特に酷い). gcj を使うなら最初からある程度 gcj をターゲットにして作っていくか, 使えないAPIを自分で実装しながら作っていくくらい気合入れてやらないと. gcj用に作ってついでにJREでも動くってのは可だが逆はかなり手間かかると思うぞ…
ん、いや、仕事で使う時なんだけど まずはJREを使うという選択肢を検討する。 次に、gcj 、Excelsiorという選択肢があるんだが 昔に比べ、JRE導入で片付く件が多くなってるんじゃないということ。 gcjもExcelsiorも、どっちも仕事で使うにはJRE使用よりも活用度は落ちると思っただけ。 趣味で使うなら、もともと有料のアプリを使う動機に欠けるわけで。 技術的興味からgcjを利用するというのはわかるけど・・・・
つ チラシの裏
↑変換後のプログラムでSocket通信を行うとフリーズしてしまうということです。
>>519 非常に申し分けないがこのスレにエスパーはいないようなんだ…
OS や gcj のバージョンくらい書いてみたらどうかね?
522 :
519 :2007/12/21(金) 17:47:51
>>521 申し訳ありません。おっしゃる通りで・・・
OS WindowsXP Professional Version2002 ServicePack2
gcj MinGW/GCC/GCJ 4.3 (gcj-eclipse-merge-branch)
変換はeclipseからAntを使って変換しました。
最終的にはJava5でコンパイルしたプログラムを変換したかったので
gcjの他のバージョンは試していません。
>>522 昔試した限りでは win32 環境で libgcj の Socket は使っただけで例外はいた。
試したのは MinGW の GCC 3.4.2 だったと思う。現状では win32 環境の libgcj は
完成度が低すぎて使い物にならないってのがそのときの結論だった。
ちょい上にも書 Sun の Java 用に書いたものを gcj にポートするのは厳しいと思えっていてあるでしょ?
# Linux だとわりと動くんだけどねぇ…
524 :
519 :2007/12/23(日) 22:35:55
あれから何度か試してみましたが、 例外もはいていないようなので原因はまったくわかりませんでした。 やはりまだwindows上では厳しいままのようですね。。 簡易のHttpServerをJavaをインストールしないで動くように出来ないかと言われて gcjに辿りついたのですが、諦めて素直にJavaをインストールしてもらいます。 しかし、こういう技術があるのをまったく知らなかったので 今回は良い勉強になりました。ありがとうございました。
>>524 デバッガで止めたらどこで止まってるの?
後スタックトレースとかもあるとうれしいが。
簡易HTTPサーバくらいなら動かせそうな気もするけどねぇ…
527 :
デフォルトの名無しさん :2008/03/12(水) 18:12:54
GCC 4.3.0 から Java 1.5 の言語仕様を満たすようになってるらすいな。
フロントエンドのリプレース終わったのか?
あけましておめでとうございます
今更で恐縮ですが、 hsqldb.jar はgcjでコンパイルでき 付属の簡易Servletも機能する あけましておめでとうございます。
誰もいない予感
夏休みでも静かだな…
過疎ってるから話題を振ってみる Sunがこういうネイティブコンパイラ作る計画ってのはないの? 今の財産生かせばそんな難しい事じゃないと思うし結構需要あると思うんだけどな
どこ向けに出すのさ
GCJ使ってる層じゃね
CNIみたいなのをサポートしてくれないなら不要。
>>533 思想的に Sun がネイティブコンパイラ出すことがそもそもありえんだろ・・・
JITのコンパイル結果をキャッシュしてくれてもいいとは思うんだよな。 クラスファイルが更新されてないかとか整合性を調べてOKなら再利用。
gnu.gcj.jit.cachedir
しかしネイティブコンパイルしてもそんなに速度あがんねーんだな。 Java実行環境も進歩したもんだ。
つうか動的な要素の多い言語だと必ずしも静的コンパイルしたほうが 早くなるわけじゃ…。実行時情報を使えないし。 C++・Fortran・OCamlあたりをネイティブコンパイルすると速度でるのは あらかじめそういうこと想定した文法やライブラリだから。
gcjのコンパイルって全部静的に解決してるのか?
実行時に外部からクラスファイルを読み込んだときのためにインタプリタも内蔵してるとか聞いた覚えがある
すごく…おおきいです
546 :
デフォルトの名無しさん :2008/10/10(金) 20:30:39
gcjを使えば、javaでcgiが作れそうなのだが、
GETやPOSTのデータを受け取る方法がわからない。
下のHello.java をgcjでコンパイルして、
http://yoursite/Hello.cgi?a=1 とかしたいのだが、nullしか受け取れん。どうすればいいだろうか?
public class Hello{
public static void main(String[] args){
String output = "";
output += "Content-type: text/html;charset=utf-8\n";
output += "\n";
output += "<HTML><BODY>hello" + System.getProperty("QUERY_STRING") + "</BODY></HTML>";
System.out.println(output);
}
}
Java2Dとかawt.Robotとかは使えるの?
>>546 QUERY_STRINGはSystem.getenvで取れると思う。ただしJava5以上ね。
POSTはstdinに放り込まれるんじゃなかったかな。
549 :
デフォルトの名無しさん :2008/10/11(土) 22:57:03
>>548 さんくす。動いた。
が、gcjが思ったより遅かったので失望した・・
なに?こんなのあるの? 俺様のLinuxに入れたサーブレットもこれでコンパイルしてみよう。
HotSpotコンパイラと同じ性能を期待したらアカンよ。 バッチ処理で使いたいならC++ with Boostでも使った方がいい。 あとJavaサーバーはJavaサーバーのまま使うのが一番速い。 SPECweb2005っていう動的Webコンテンツのベンチマークがあるんだけど、 そこはJSPの独壇場でPHPじゃ歯が立たない状態になってる。
phpてw そこまで話のレベル落とされても…
gcjならjre使うより速いって思い込んでる住人のレベルの低さのが気になる
JITコンパイル時間が短縮される 実行時の性能は今時のサーバーVMのが上 つまりサーバアプリに使っても何の意味も無い ってことで合ってる?
思い込んでねえって。10ぐらい前のレスでも話でてる。
>>554 サーバアプリみたいに、
起動しっぱなしで、
同じコードを何度も何度も実行する応用の場合、
JITの性能がメインファクター。
gcjはarmネイティブコンパイル用に使うんです><
armって、libgcjもてるような環境そんなに多いか?
ちょw