Титла: Компилиране на java код c gcj Публикувано от: pikimos в Oct 18, 2009, 17:47 Днес се натъкнах на странен проблем. При компилиране на програма на java с компилатора на javac до баит код и стартиране на програмата в java конзола всичко работи коректно, но при компилиране на кода с gcj посредством командата:
Код програмата не се изпълнява коректно. Ето и кода: Код Когато се стартира програмата трябва веднага да се отпечатат в конзолата 24 и 25 ред но това не се случва, при подаване на командата Код Курсора преминава на нов ред без да се отпечата нищо. Там съответно трябва да се въведе числото за обхвата и чак след това се отпечатват 24 и 25 ред и после трябва още веднъж да се въведе числото. Същото се повтаря и когато трябва да се отпечата ред 43. Стигнах до извод, че изпълнението на кода на ред 23 предизвиква преминаването на курсора на нов ред без отпечатване на нищо и предизвиква въпросното прекъсване на програмата. Ако преместя кода: Код под ред 25 тогава и двата реда се разпечатват веднага след стартирането на програмата но пък прекъсването пак е налице. Въпросният ред отговаря за четеното от конзола. Някой има ли идеи как да се реши проблема? Просто реших да тествам компилатора с въпросната програма. Предполагам, че ако се направи графичен интерфейс за програмата няма да има проблеми, но в конзолата така стоят нещата. Титла: Re: Компилиране на java код c gcj Публикувано от: bop_bop_mara в Oct 19, 2009, 04:01 Първо за графичния интерфейс - той си е отделно нещо, да работи "двигателя" под него, пък после му мисли каквито там финтифлюшки си предствяш.
Сега за gcj - никога не съм ползвала този компилатор, но изглежда, че се прави така: Код Т.е. все едно стандартното Код
После може и: Код
За твое успокоение - с java-та на Сън, кода си върви: Код
Погледни това ($2) :) Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 19, 2009, 07:33 Да с Java на Сън работи това го знам, но идеята е да се компилира не до байт код а до машинен код и да работи коректно.
Всъщност тя програмата си работи и компилирана с gcj но не се интерпритира от конзолата коректно. Спазих стъпките, които описваш и няма резултат. Ако някой знае някой друг компилатор за java до машинен код нека пише. Титла: Re: Компилиране на java код c gcj Публикувано от: remotex в Oct 19, 2009, 11:05 Сигурен ли си че не ти даде грешка при компилирането от сорта на
Код е при мен редовете са други щото поизрязах коментарите, но идеята е следната - gcj е съвместим с java v 5.0 и по-малка а Scanner мисля го въведоха в по-новите версии така че ако държиш много да го ползваш gcj ползвай по-старите алтерантиви там .. по мои спомени то не бяха buffered Reader/Writer та после New IO i.e. nio класове та чак след това опряхме до Scanner(s) след версия 6.0 и нагоре :) Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 19, 2009, 11:33 Да най-вероятно проблема е точно това ще пробвам да пренапиша програмата с по старите версии за четене от конзола и ще кажа има ли резултат.
А иначе не ми даде тази грешка при компилиране. С Убунту 9.10 съм и последната версия на gcj за дистрибуцията но вероятно не са доизпипали както трябва подръжката на java 6. Титла: Re: Компилиране на java код c gcj Публикувано от: bop_bop_mara в Oct 19, 2009, 13:49 По мои спомени имаше Scanner в java 5 ...
Както и да е, верно, че gcj беше съвместим с някоя по-стара версия на java. Ама аз разбрах, че се е компилирало успешно и просто като го пуснеш, не върви. Даде ли ти грешки при компилацията и какви, дай изход от конзолата при компилация и при пускане. Иначе Scanner наистина не е за препоръчване да се ползва, особено, когато трябва да прочетеш много голям вход. Титла: Re: Компилиране на java код c gcj Публикувано от: ръца-пръца в Oct 19, 2009, 14:32 java.util.Scanner е въведен в Java 5 (вижте http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html).
Според мен пробвай като за начало да добавиш System.out.flush() след System.out.print(... на 25-и ред. По спецификация (http://java.sun.com/j2se/1.5.0/docs/api/java/io/PrintStream.html ($2)) никъде не е казано, че autoFlush флага е вдигнат по подразбиране и нищо чудно в не-Sun имплементация да се чака flush-ване и след println()... Титла: Re: Компилиране на java код c gcj Публикувано от: remotex в Oct 20, 2009, 08:59 yoakim-е прав си ...обаче зависи явно от коя версия 5.х и нагоре е въведено за gcj - защото аз съм с 5.0 а ми дава горните грешки при компилация
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre а пък: gcj --main=NsiProg -o NsiProg NsiProg.java NsiProg.java:3: error: The import java.util.Scanner cannot be resolved import java.util.Scanner; Код
Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 20, 2009, 09:17 Ето какво открих вчера.
До сега правех тестовете с пакетите на openjava. Реших да ги махна и да пробвам с пакетите sun-java. Само да добавя, че кода е коректен и никога при компилация не ми е давало каквито и да било грешки! Значи с другите пакети на java пак си минава компилацията успешно и проблема със засичането на програмата на реда Scanner си остава но интересното е, че когато компилирам до байт код със стандартния java компилатор javac и пусна програмата с java NsiProg, ефекта е същия както и когато програмата е компилирана с gcj до машинен код. След, като махнах пакетите на sun и върнах пакетите openjava програмата отново заработи коректно но само в конзолата на java. Това ме навежда на мисълта, че може би трябва да се зададе някакъв специфичен път с параметъра --classpath=/..../..../...... но не знам къде или към кой файл да сочи пъя. При мен версията на gcj e: Код
Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 22, 2009, 13:19 Кратко точно и ясно, компилира се и работи без никакви проблеми. C++ :)
Код
Титла: Re: Компилиране на java код c gcj Публикувано от: bop_bop_mara в Oct 22, 2009, 14:08 //offtopic
Сега ако си унифицираш стила ::) Цитат #include <stdlib.h>C++ или C? stdio или iostream? Цитат bool max = mainNumber > b;if(mainNumber > b) (това и за java) Предполагам сега се учиш да програмираш, така че не приемай това като заяждане, а като съвети :) Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 22, 2009, 14:25 Да сега се уча и благодаря за съвета :)
Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 22, 2009, 15:24 Редактирах кода и сега изглежда по прилично :)
Ползвам netbeans, който е за c/c++ но когато въвеждам #include <iostream.h> ми дава Cannot find include file iostream.h иначе с iostream само няма проблем. Титла: Re: Компилиране на java код c gcj Публикувано от: bop_bop_mara в Oct 23, 2009, 11:56 Код
Код
В C няма iostream. То си е за C++, основното му смислено предназначение, ако не бъркам, е в ООП-то и предефинирането на оператори. Иначе функциите в stdio са за предпочитане. Ползвам netbeans, който е за c/c++Пробвай да ползваш някой хубав текстов едитор (поне с оцветяване на кода) и компилиране и пускане през конзола. Много по-полезно ще ти е според мен :) Титла: Re: Компилиране на java код c gcj Публикувано от: pikimos в Oct 23, 2009, 13:58 Ще препоръчаш ли някой :)
Титла: Re: Компилиране на java код c gcj Публикувано от: lkr в Oct 23, 2009, 14:29
Предефиниране на оператори и iostream? Основната му функция е STREAM, няма нищо общо с предефиниране на оператори, освен това, че потоците са предефинирани за различни типове. Цитат Иначе функциите в stdio са за предпочитане. Защо? Цитат Пробвай да ползваш някой хубав текстов едитор (поне с оцветяване на кода) и компилиране и пускане през конзола. Много по-полезно ще ти е според мен :) Ако Netbeans ти върши работа и нямаш проблеми, не пробвай друго. |