به نام خدا

Fatal Error
Welcome To Fatal Error Weblog

  جاوا در لینوکس

جاوا در گنو/لینوکس


زبان Java یکی از قدرتمندترین و کارامدترین زبان‌های بـرنامه سازی است که توسط شرکت SUN Microsystems طراحی شده است. این زبان که یک زبان کاملا شی گراست دارای قابلیت‌های بسیار زیادی در زمینه‌های مختلف می‌باشد.

Java و تکنولوژی‌های وابسته به آن در زمینه‌هایی چون برنامه‌های کاربردی، وب، شبکه، امنیت، پایگاه داده، پردازش موازی، طراحی و پردازش چند رسانه ای و غیره کاربرد بسیار دارند.

سوالی کـــه ممکن است برای هر توسعه دهنده نرم افزارهای Java کـه به تازگی با دنیای سیستم عامل لینوکس آشنا شده است مطرح شود، این است که در لینوکس چگونه می‌توان از Java استفاده نمود؟ مــا در این مقاله به بررسی این موضوع خواهیم پرداخت.

برای این منظور دو راه در لینوکس وجود دارد که نسبت به بقیه موارد متعارف‌تر است:

۱) استفاده از بسته JDK شرکت SUN

۲) استفاده از کامپایلر و دیگر ابزار های مربوط به Java در مجموعه GCC

 

بسته JDK

همان طور که می دانید یکی از Platform های متعددی کــه Java پشتیبانی می‌کند، لینــوکس است . یعنی به سادگی می‌توانید بــا مــراجعه به سایت جاوا [۱] و یا یکی از mirror های آن و دریــافت بستـــه JDK و نصب آن، از ایـــن بســـته استفاده کنید. بــرای این کار فایل با پسوند bin را download کـرده و به صورت زیر اجرا کنید تا JDK بر روی سیستم شما نصب شود.

# ./jdk-1_5_0_04-linux-i586.bin

 

پس از اجرای این دستور فایل‌ها از حـالت فشرده خارج شده و در دایرکتوری جاری شما قرار خواهند گرفت. با استفاده از دستور export برای تنظیم متغیر های PATH و CLASSPATH می‌توانید از این بسته استفاده کنید.

$ export PATH=/home/<user>/jdk1.5.0_04/bin:$PATH

$ export CLASSPATH=/home/<user>/jdk1.5.0_04/lib:<other paths to class libraries>

بـــرای اطلاعات کامــلتر در مورد نصب و پیــکربندی JDK به فایلـهــای install.html و system-configurations.html در وب سایت جاوا مراجعه کنید.

 

نحوه استفاده از ابزارهای JDK

بسته JDK دارای ابزارهای مختلفی می‌باشد. در اینجا به چند نمونه از مهم ترین این ابزارها خواهیم پرداخت.

javac : این ابزار کامپایلر Java می‌باشد که کدهای منبع Java را به bytecode تبدیل می‌کند. صورت کلی این دستور به صورت زیر می باشد:

$ javac [options] [sourcefiles.java]

معمــولا option هــای زیــادی با javac به کار نمی‌رود. شــاید مهم ترین آنها g- و classpath- باشند. بــرای آگــاهــی از لیست کامل این گزینه ها دستور زیر را اجرا کنید:

$ man javac

java: این ابزار یک Java Application را اجرا می کند. صورت کلی این دستور به دو صورت زیر می باشد:

$ java [options] class [arguments]

$ java [options] –jar file.jar [arguments]

Options ورودی هایی هستند که می‌توانند نحوه اجرا را تغییر دهند. مانند javac معمـــولا option های زیــادی با java به کار نمی‌رود. برای اطلاع از لیست کامل این option ها دستور man java را اجرا کنید.

Class نام کلاسی است که به عنوان main صدا زده خواهد شد. file.jar نام jar فایلی است که مورد اجرا قرار می‌گیرد و در نهایت arguments ورودی‌هایی هستند که به تابع اصلی برنامه پاس خواهند شد.

jar: این ابزار چندین فایــل را بــه صــورت یــک فــایــل jar ترکیب می‌کنـــد. این ابزار می تواند jar فایل را به روز کند، آن را Extract کند، محتوای آن را لیست کند و یا به آن یک index اضافه کــنــد. ایــن دستـور دارای صورت‌های بسیار زیادی می‌باشد. برای استفاده مناسب از این ابزار به manual page آن مراجعه کنید.

jdb: برنامه اشکال زدایی کدهای Java – صورت کلی این دستور به صورت زیر می باشد:

$ jdb [options] class [arguments]

یک مثال: فرض کنید که دو فایل Hello.java و MyString.java داریم و کدهای زیر را به صورت زیر در ان وارد کرده‌ایم .

/* Hello.java */

public class Hello {

public static void main(String args[]) {

MyString str = new MyString();

str.add(“Hello”);

str.add(“World”);

str.print();

}

}

/* MyString.java */

public class MyString {

private String string = “”;

public void add(String newword) {

if (string.length() > 0)

string += “ ”;

string += newword;

}

public void print() {

if (string.length() > 0)

System.out.println(string);

else

System.out.println(“The string is empty”);

}

}

به سادگی با دو دستور زیر می‌توانید این برنامه کامپایل و اجرا نمایید:

$ javac Hello.java

$ java Hello

 

نحوه استفاده از ابزارهای GCC

یکی از زبان‌های مــورد پشتیبانی در مجــمــوعه بـسیــار مـعروف GCC کامپایلر زبان Java می باشد . این مجموعه دارای ابزارهای زیادی در ارتباط با Java می‌باشد. مــهـم ترین ابزارهای آن که ما در این مقاله به آنها خواهیم پرداختjar ،gij gcj می‌باشند.

ابزارهای مجموعه GCC کاملا با استاندارد Java مطابقـت دارند بدین معنی که اگر شما کد Java ای را با استفاده از GCC کامپایل کنید بدون هیچ گونه ایرادی با استفاده از ابزارهای JDK قابل اجرا می باشد و بالعکس.

gcj: کامپایلر کدهای Java در مجموعه GCC ( معادل javac در JDK )

gij: مترجم Java bytecode در مجموعه GCC ( معادل java در JDK )

jar: ابزاری برای Java Archives ( معادل jar در JDK )

مــزیتی کــه ابـزارهای GCC بر ابزارهای JDK دارند این است که می‌توانند عملیات بسیار بیشتری را بر روی کدهای Java انجام دهند. برخی از این عملیات عبارتند از: ایــجــاد کد اسمبلی – ایجــاد کتابخانه ( static و shared ) و از همه مهمتر تولید برنامه قابل اجرا. در زیر به این موارد خواهیم پرداخت:

 

عملیاتی بر روی یک فایل

فرض کنید که کد Java زیر را داشته باشیم:

/* MyHello.java */

public class MyHello {

public static void main(String args[])

{

System.out.println(“Hello World”);

}

}

برای تبدیل این کد به یک کد اجرایی دستور زیر را وارد کنید.

$ gcj --main=MyHello --Wall MyHello.java -o MyHello

بایستی با استفاده از main-- کلاس اصلی را مشخص کنید و برای اجرای ان به صورت زیر عمل کنید:

$ ./MyHello

برای تبدیل همین کد به bytecode دستور زیر را به کار ببرید.

$ gcj --C --Wall MyHello.java

و برای اجرای ان به دو صورت زیر می توانید عمل کنید.

$ gij MyHello

$ java MyHello

 

برای تبدیل این کد Java به object file دستور زیر را به کار ببرید.

$ gcj -c MyHello.java

و برای تبدیل object file ها به فایل اجرایی دستور زیر را به کار ببرید:

$ gcj --main=MyHello MyHello.o -o MyHello

و برای تبدیل فایل bytecode به فایل اجرایی دستور زیر را به کار ببرید:

$ gcj MyHello.class -o MyHello

و در نهایت برای تولید کد اسمبلی دستور زیر را به کار ببرید:

$ gcj -S MyHello.java

عملیاتی بر روی چند فایل

مثال بخش مربوط به JDK که شامل دو فایل بود را در نظر بگیرید . برای تبدیل ان مثال به برنامه قابل اجرا دستور زیر را به کار ببرید.

$ gcj --main=Hello Hello.java MyString.java -o Hello

$ ./Hello

می توانید هر کدام از دو فایل Java را به object file تبدیل کرده و با یکدیگر لینک کنید به صورت زیر:

$ gcj -c Hello.java

$ gcj -c MyString.jaav

$ gcj --main=Hello Hello.o MyString.o -o Hello

$ ./Hello

همچنین می توانید هر کدام از دو فایل java را به bytecode تبدیل کرده و پس از ان با یکدیگر لینک کنید. به صورت زیر :

$ gcj -C Hello.java MyString.java

$ gcj --main=Hello Hello.class MyString.class -o Hello

$ ./Hello

یا اینکه می توانید مستقیما bytecode را به وسیله java یا gij اجرا کنید:

$ java Hello or $ gij Hello

 

ایجاد static library

برای این کار ابتدا باید فایلهای java را به object file تبدیل کنید و سپس با استفاده از دستور ar این کار انجام می پذیرد.

$ ar -rc libMyString.a MyString.o …… ( other object files )

 

ایجاد shared object

بــرای تولید shared object ابتدا باید فایل‌های java را بــه شــکــلی متفـاوت نسبت به قبل کامپایل کنید. به صورت زیر با

 

استفاده از ورودی –fpic

$ gcj -fpic -c MyString.java

و به صورت زیر shared object ساخته خواهد شد.

$ gcj -shared MyString.o …… ( other object files ) -o libMyString.so

 

ایجاد jar فایل

ابتدا بایستی فایل‌های java را به byetcode تبدیل کنید:

$ gcj -C MyString.java

و سپس با استفاده از دستور زیر jar فایل ساخته خواهد شد:

$ jar cf libMyString.jar MyString.class …… ( other class files )

 

نتیجه گیری

در این مقاله به بررسی اجمالــی دو بستــه JDK و GCC-Java کــه بـــرای تــوســعــه Java Applications بـه کار می‌روند پرداختیم. مــوارد ذکر شده در ایـن مقاله تنها بخش کوچکی از امکانات و ابزارهای موجود در سیستم عامل لینوکس برای توسعه کد های Java می‌باشد. امید است که مورد فایده واقع شود.

منبع :irantux

تگ های این مطلب :برنامه نویسی جاوا در لینوکس
و تگ های این مطلب :java programming on linux
و تگ های این مطلب :java programming
و تگ های این مطلب :برنامه نویسی در لینوکس
نویسنده : Fatal Error | ساعت ٢:٢٦ ‎ب.ظ روز ۱۳۸۸/۱/٤
پيام هاي ديگران () | لینک ثابت

  برنامه نویسی C در لینوکس

ابزارهای برنامه نویسی

‏سیستم‌های GNU به همراه کامپایلری به نام gcc ارایه می شود. gcc از ابتدا مخفف GNU C Compiler بود ولی پس از مدتی که قابلیت کامپایل زبان‌های دیگری غیر از C به آن افزوده شد نام آن را GNU Compiler Colection خطاب می‌کنند. پدید آورنده‌ی اصلی GCC ریچارد استالمن، بناینگذار پروژه GNU است. نخستین نسخه GCC در سال ۱۹۸۷ انتشار یافت که یک پیشرفت مهم و اساسی در پیشبرد اهداف GNU Project محسوب می‌شد زیرا محصول جدید اولین کامپایلر بهینه سازی شده قابل حمل ANSI C به عنوان یک نرم افزار آزاد محسوب می شد. در سال ۱۹۹۲ نسخه 2.0 کامپایلر GCC عرضه شد. نسخه جدید قابلیت کامپایل کدهای ++C را نیز داشت.
در سال ۱۹۹۷ یک انشعاب آزمایشی در GCC به نام EGCC به منظور بهینه سازی کامپیایلر و پشتیبانی کامل تر از ++C ایجاد شد. در ادامه EGCC به عنوان نسل بعدی کامپایلر GCC پذیرفته شد و تکامل آن باعث انتشار نسخه سوم GCC در سال ۲۰۰۴ گردید. چهارمین نسخه از کامپایلر GCC در سال ۲۰۰۵ عرضه شد. برای اطمینان از اینکه gccرا نصب کرده‌اید یا خیر دستورات زیر را وارد کنید :

mety@localhost:~/$ gcc –version

4.1.1

mety@localhost:~/

نسخه‌ای از gcc که شما استفاده می کنید ممکن است متفاوت باشد. هر چیزی شبیه این از قبیل 3.4.6 یا 4.1.1 مناسب است. اگر پیغام خطای " command not found" را دریافت می کنید، شما gcc را نصب نکرده‌اید. اگر لینوکستان را از روی cd نصب کرده‌اید می توانید gcc را در آن پیدا کنید. اگر شما نمی‌دانید چگونه باید gcc را در سیستم خود نصب کنید می‌توانید از طریق انجمن‌های مختلف موجود در اینترنت اقدام نمایید.

معرفی کامپایلر gcc

بسیار خوب، می خواهیم کامپایل کردن یک تکه کوچک کد C را از طریق gcc به شما نشان دهیم. اینجا هدف آموزش نحوه استفاده از gcc است بنابر این در این بخش به شرح سازوکار کد C نمی‌پردازیم. در نمونه ۱.۳ کوچکترین قطعه کد C که gcc قادر به کامپایل آن است را می بینید. این کد هیچ کاری انجام نمی دهد.
نمونه  tiny.c

main()

{

}

این قطعه کد را در ویرایشگر متن خود تایپ و با نام tiny.c ذخیره کنید. شما می توانید هر نام دیگری را نیز که به پسوند c. ختم می شود انتخاب کنید. این پسوندی است که برای سورس کدهای نوشته شده با C استفاده می شود. gcc برای کامپایل یک برنامه صحت این پسوند را چک می‌کند. با در اختیار داشتن یک فایل ذخیره شده حالا می توانید به وسیله دستور زیر آنرا کامپایل کنید:
کامپایل برنامه

mety@localhost:~/$ gcc tiny.c

mety@localhost:~/

در صورتیکه که‌این فرمان با موفقیت انجام شود بدون پیغام خروجی خواهد بود. در صورتیکه هر گونه پیغام خطایی را دریافت کردید باید صحت برنامه خود را چک کنید. در صورتیکه فرض کنیم شما این برنامه هشت کاراکتری را درست نوشته باشید باید فایلی به نام a.out در دایرکتوری شما ایجاد شود. این برنامه زبان ماشینی است که از کدهای بالا ساخته شده است. در صورتیکه آنرا اجرا کنید خواهید دید که در واقع هیچ فعالیتی انجام نمی دهد. نامگذاریa.out دلایل تاریخی دارد، اما مخفف output Assembler می‌باشد.
اگر چه gcc این کدها را کامپایل کرد اما این کدها کامل نیستند اگر شما اخطار‌های gcc را فعال کنید به شما گفته خواهد شد چه کمبود‌هایی وجود دارد. با اضافه کردن گزینه‌ی Wall- به فرمان کامپایل می‌توانیماخطار‌های gcc
را فعال می کنیم:

فعال کردن نمایش اخطارها

mety@localhost:~/$ gcc -Wall tiny.c

tiny.c:2: warning: return-type defaults to `int'

tiny.c: In function `main':

tiny.c:3: warning: control reaches end of non-void function

mety@loclhost:~/$

دلیل نمایش داده شدن این پیغام‌ها کامل نبودن برنامه‌ی نوشته شده توسط ماست. برای رهایی از این پیغام‌ها باید با افزودن سازوکارهای جدید برنامه‌ای کامل‌تر ایجاد کنیم. در اینجا با افزودن دو سطر جدید به برنامه، آن را به کوتاهترین برنامه معتبر C تبدیل می‌کنیم:
نمونه  tiny2.c

int

main()

{

  return 0;

}    

حالا برنامه را با گزینهWall- کامپایل می کنیم و شاهد این خواهید بود که پیام خطایی نمایش داده نمی‌شود. گزینه‌ی مفید دیگر o filename- است که نام فایل خروجی را ( به جای a.out) مشخص می‌کند.

mety@localhost:~/$ gcc -Wall -o tiny-program tiny2.c

mety@localhost:~/$ ls

tiny2.c  tiny-program

mety@localhost:~/$ ./tiny-program

mety@localhost:~/$

برنامه سلام

هر برنامه C ملزم به داشتن تابعی به نام ()main است. اجرای برنامه از این تابع شروع می شود. می توان تمامی کدهای برنامه را در تابع ()main قرار داد اما روش مرسوم تر تقسیم برنامه به چندین تابع کوچک است. به عنوان اولین قطعه کد مفید در این مقاله به یک نمونه کلاسیک نگاه می اندازیم. سپس از کامپایل و اجرا برنامه یک پیام ساده روی صفحه نمایش شما چاپ می‌کند. برنامه تابعی به نام ()main را تعریف (define) و تابعی به نام ()printf را فراخوانی (call) می‌کند. ()prinf تابعی است که توسط کتابخانه ابزار ورودی/خروجی استاندارد (Standard Device Input/Output library) فراهم می شود که‌این کتابخانه به همراه هر سیستم GNU وجود دارد. متن برنامه کوچک ما به صورت زیر است:

نمونه  hello.c

#include

 

int main()

{

  printf("hello, world");

 

  return 0;

}

حالا برنامه را کامپایل و اجرا کنید. اگر همه چیز درست باشد عبارت “hello, world” بر روی ترمینال شما (ابزار خروجی استاندارد ) نمایش داده خواهد شد. در صورتیکه فرامین مربوط به کامپایل و اجرای برنامه را فراموش کرده‌اید آنها به صورت زیر هستند :
فرامین کامپایل و اجرای برنامه

mety@localhost:~/$ gcc -Wall -o hello hello.c

mety@localhost:~/$ ./hello

hello, world

mety@localhost:~/$

اگر شما هرگونه پیام خطا و یا اخطار را مشاهده می کنید دقت کنید که کدهای شما دقیقا مطابق کدهای این کتاب باشد. هر پیام خطایی که دریافت کنید سطری را که در آن مرتکب اشتباه شده‌اید به شما اعلام می‌کند. در صورتیکه کدها را صحیح تایپ کرده باشید چنین پیام‌هایی را دریافت نخواهید کرد.

فایل‌های چندگانه

اجباری برای اینکه برنامه‌ها تنها در یک فایل معین نوشته شوند وجود ندارد. کدهای شما میتوانند در هر تعداد فایل که بخواهید پخش شوند. به عنوان نمونه اگر برنامه‌ای از ۴۰ تابع تشکیل شده باشد شما می توانید هر تابع را در یک فایل جداگانه قرار دهید؛ اگر چه این کار یک افراط در تکه تکه کردن برنامه است. غالبا توابع بر حسب موضوع در گروه‌هایی دسته بندی شده و در فایل‌های جداگانه قرار می گیرند. برای نمونه در صورتیکه وظیفه یک برنامه محاسبه قیمت یک پیتزا و نمایش نتیجه است شما می توانید توابع مربوط به محاسبه قیمت را در یک فایل و توابع نمایش نتایج را در فایل دیگری قرار داده و از فایل سوم برای نگهداری تابع ()main استفاده کنید. حال می توانید از فرمان زیر برای کامپایل برنامه استفاده کنید:
کامپایل برنامه تشکیل شده از سه فایل

mety@localhost:~/$ gcc -o pizza_program main.c prices.c display.c     

یاد آوری می کنیم در صورتیکه تابعی را در prices.c تعریف و قصد فراخوانی آن را در main.c دارید باید آنرا در main.c اعلان کنید.

فایل‌های سرآیند

ادامه پیگیری اعلان توابع می تواند موجب شلوغ کاری شود. به همین دلیل فایل‌های سرآیند برای جا دادن کدهای C که شما قصد به کارگیری آنها در فایل‌های چندگانه را دارید استفاده می شوند. قبل از این شما به طور عملی از یک فایل سرآیند به نام stdio.h استفاده کردید، این فایل سرآیند شامل اعلان توابع بسیار زیادی است. از جمله شامل تابع ()printf و نیز اعلان آن است. شما نیز می توانید یک فایل سرآیند شامل اعلان توابعی که قصد به اشتراک گذاری آنها را دارید ایجاد کنید و سپس با استفاده از include# آن را در اختیار هر فایل C که به اطلاعات آن احتیاج دارد قرار دهید. تنها تفاوت موجود در این است که شما باید به جای علائم < و > نام فایل خود را بین دو "،" یا کوتیشن مارک قرار دهید. یعنی از "my_header.h" به جای استفاده کنید.

کامپایل این برنامه به صورت زیر است :

mety@localhost:~/$ gcc -Wall -o pizza_program main.c prices.c display.c     

 

 

تگ های این مطلب :برنامه نویسی ‍‍c در لینوکس
و تگ های این مطلب :c programming on linux
و تگ های این مطلب :برنامه نویسی در لینوکس
و تگ های این مطلب :c programming
نویسنده : Fatal Error | ساعت ٥:۱٥ ‎ق.ظ روز ۱۳۸٧/٧/۸
پيام هاي ديگران () | لینک ثابت