Java初心者です。開発環境は、Windows7 32ビットマシンです。先日、GCJを使えば、Javaソースコードを直接ネイティブのオブジェクトコード(マシン語)にコンパイルできると教わったので、早速MinGW Installerをインストールし、MinGW Installerの中から「The GNU Java Compiler」を選択しインストールしました。次にWindowsのシステム環境変数画面で、「C:\MinGW\bin」にPathを設定しました。この状態で、定番の「Helloプログラム」をメモ帳で書き(ファイル名: Hello.java)、「C:\Users\Owner」ディレクトリに置き、以下のコマンドで、GCJによりHello.javaを直接ネイティブのオブジェクトコードにコンパイルし、Hello.exeというオブジェクトコードを生成しようとしましたが、以下のエラーメッセージが出てしまいます。
C:\Users\Owner>gcj --main=Hello -o Hello.exe Hello.java
/mingw/lib/libgcj.a(win32.o):win32.cc:(.data+0x0): multiple definition of `_CRT_MT'
/mingw/lib/libmingw32.a(crtst.o):(.bss+0x0): first defined here
/mingw/lib/libmingw32.a(setargv.o):(.text+0x30): undefined reference to `__chkstk_ms'
どうやらlibgcjが既に定義済みのCRT_MTを持っていて、それがmingw32での定義とコンフリクト(重複・矛盾)しているようなのですが、なぜこういう現象が生じたのか、そしてどうすればこのエラーを解決できるのかがわかりません。これに加えて、chkstk_msへの未定義の参照というエラーも出ています。こちらも解決方法が不明です。お詳しい方、できましたらお助け願います。
No.2ベストアンサー
- 回答日時:
undefined reference to `__chkstk_ms'
で検索すると、GCCのバージョンとMinGWのバージョンの不一致で発生するようです。
※ より正確には、GCCがどのMinGW向けにコンパイルされたものかによる。
gcjの開発も止まり、MinGWではGCC4.5以降にgcjが含まれていないことを考えると、MinGWとGCCとgcjの不一致が発生しているのでしょう。
対策は
(1) MinGW,GCC,gcjのバージョンを対応しているものに揃える
(2)最新のMinGW,GCC向けにgcjをソースからコンパイルする
となるでしょう。
kmee様、ご回答ありがとうございました。
>GCCのバージョンとMinGWのバージョンの不一致で発生するようです。
やはりそうですか。エラーメッセージにバージョンナンバーが出てないので違うのかなと最初思いましたが、おっしゃる通りバージョン不一致くらいしか思い当たる原因がなさそうですね。
ご指摘の対策、早速試してみます。因みに、thisiscool.com (https://www.thisiscool.com/gcc_mingw.htm)でみると、GCC/GCJ 4.3 (gcj-eclipse-merge-branch)が最新のようなので、早速それに差し替えてみましたが、同じエラーメッセージが出ました。残りのバージョンも、全て試してみます。
No.4
- 回答日時:
>「イベントリスナー」という監視機能があるそうですが、
イベントリスナはインターフェースを介したただのコールバックで
監視機能ではありません。何の契機にコールバックを行なうかは
アプリやライブラリ次第。GUIライブラリなら利用者の
画面操作に関連したイベント処理になるというだけです。
No.3
- 回答日時:
>自分用または自分が勤める会社用のアプリを開発する際に、
>言語としてJavaを選ぶ開発者はいなくなっちゃうと思います
でもムチャクチャ広く使われてますよ。ソフトハウスでは
Javaの仕事が受注の上位です。c++は扱いが難しいので
利用も開発者も減る一方です。
JITに不満を持つ人は少ないです。起動時の遅さが
問題になるケースが少ないからです。
アプリもosもDBもなんだかんだメモリーキャッシュのお世話になるので
起動時はどうせ遅いという事情も有ります。
サーバアプリのような常駐を前提にしたアプリでは
問題有りませんし、無理矢理常駐化という最後の手段もあります。
tknakamuri様、2度目のご回答、ありがとうございました。
>ソフトハウスでは、Javaの仕事が受注の上位です。c++は扱いが難しいので利用も開発者も減る一方です。
>起動時の遅さが問題になるケースが少ないからです。
おっしゃる通りだと思います。
>サーバアプリのような常駐を前提にしたアプリでは問題有りませんし、無理矢理常駐化という最後の手段もあります。
tknakamuri様、厚かましいですが、おさしつかえなければ、もう一つ初心者の素朴な質問をしてもいいでしょうか? Javaでは、「ボタンをクリックする」など特定のイベントが発生した時に所定のメソッドを実行する「イベントリスナー」という監視機能があるそうですが、ボタンやマウスの操作の代わりに、「リアルタイムで変動する特定の変数の値がある値を超えたら所定の処理を実行する」という「イベントリスナー」の設定って、できるのでしょうか? これができれば、サーバアプリではないですが、その特定の変数につき常駐監視(常駐化)を行えることになり、確かに起動時の遅さは問題ではなくなるように思うのですが。ネットで調べた限りでは、ボタンやマウスのケースしか紹介されていませんでした。何かヒントをいただけましたら、うれしいです。別の教えてgoo質問スレッドを立てるべきとすれば、そう致します。
No.1
- 回答日時:
エラーはよくわかりませんが
Java1.4対応じゃ実用性無いのでは?
最終リリース2009年で
もう死んでるっぽいです。
tknakamuri様、ご回答ありがとうございました。
「Java1.4対応じゃ実用性無いのでは?」、「最終リリース2009年でもう死んでるっぽいです。」というコメントは、GCJのホームページ(https://gcc.gnu.org/java/)からでしょうか? 確かに「It .... supports most of the 1.4 libraries plus some 1.5 additions.」、「GCJ News Last Enhancement: September 22, 2009」になってますね。それとMinGW経由でインストールしたGCJは、2006年バージョンみたいです。それが最新なんでしょうから、確かに古いです。
ただ、起こったエラーはGCJに関してではなく、MinGWに関するエラーだと思います。GCJをインストールする際に、ほかのパッケージもインストールしたので、それがよくなかったのかもしれません。一旦GCJ以外にインストールしたパッケージを全部削除し、GCJだけにしてリトライしてみようかと思っています。あと、バイトコードからオブジェクトプログラム(マシン語)生成のコンパイル(JREでじゃなくてGCJで)の方も試してみます。こちらができれば、ソースプログラムからできなくても、結果オーライですので。たぶんできないでしょうけど。
因みに、GCJ以外に、Javaソースプログラムを直オブジェクトプログラム(マシン語)にコンパイルできるコンパイラってありますでしょうか? もしそういうものがないとすれば、Javaのアプリは必ず実行マシン用のJREでバイトコードをネイティブマシン語に変換してから実行という余分なステップが一つ入ると思うので、最適化され微差とはいえ、C++などの他のコンパイラ言語を使った場合より実行速度が遅くなるはずで、それなりのディスアドバンテージになりますよね。でも、常識的には、Java(JDK plus JRE)でも結局ネイティブマシン語に変換しているのですから、その変換したネイティブマシン語を予め作れない、ないしは取り出せないなんてことは、あり得ないと思っています。もしこれができないようだと、自分用または自分が勤める会社用のアプリを開発する際に、言語としてJavaを選ぶ開発者はいなくなっちゃうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- Perl Perl の外部モジュールの利用方法 3 2022/07/10 18:34
- Visual Basic(VBA) VBA★PDFをPDFアプリで印刷しようと思っていますが上手くゆきません 1 2022/06/06 22:04
- その他(コンピューター・テクノロジー) Windows11の顔認証 3 2023/05/10 07:09
- その他(プログラミング・Web制作) Pythonの作業環境・作業フォルダの迅速な設定・指定方法 3 2022/04/01 07:55
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Java jdk17.06のインストーラーが起動しない 1 2023/03/27 21:58
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(OS) CloudreadyでLinuxのセットアップが出来無い 1 2022/04/06 12:36
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IIS環境でJAVAを使用したい
-
Eclipse3.5EEでJavaのコンパイ...
-
.jarファイルの中身って書き換...
-
無名パッケージのクラス
-
javaが文字コードの影響でコン...
-
javaの簡単なソースがコンパイ...
-
JAVAでC/C++の条件コンパイルの...
-
Javaを1から始めるにあたって
-
eclipseの構文エラーについて
-
「シンボルを見つけられません...
-
C#プログラムファイルの文字コード
-
コンパイルエラーに出てくる、i...
-
検索後のurl表示窓に出る文...
-
classファイルをjavaファイルへ。
-
HelloWorldのソースがコンパイ...
-
-deprecationとは?
-
JSPのエラーメッセージを見る方法
-
javaコンパイル用バッチファイ...
-
Javaのコンパイル結果が表示さ...
-
ANT によるJSPコンパイル方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.jarファイルの中身って書き換...
-
javaが文字コードの影響でコン...
-
Eclipse3.5EEでJavaのコンパイ...
-
コンパイルエラーに出てくる、i...
-
javax.servlet は存在しません...
-
IIS環境でJAVAを使用したい
-
サクラエディタでjavaのプログ...
-
Javaのコンパイル結果が表示さ...
-
「識別子がクラス名でも名前空...
-
eclipseの設定のJREとコンパイ...
-
javaの簡単なソースがコンパイ...
-
eclipseの構文エラーについて
-
JAVAでC/C++の条件コンパイルの...
-
dokojavaのコンパイルについて
-
TeXで図を挿入できません.助け...
-
LaTeXでのアンダーバーの入力
-
Log4jのインストール
-
逆コンパイルの見方について
-
TOMCAT_HOMEって?
-
Javaについて教えてね。
おすすめ情報