Linux-perusteet / Harjoitus H6 / Linux-käännöksiä

Pohjana Tero Karvisen Linux-kurssi http://www.iki.fi/karvinen/

Kokeiltiin yksinkertaisten Hello World -ohjelmien kääntämistä Linux-ympäristössä. Tehtävää varten valittiin kolme eri kielistä toteutusta tällaisesta ohjelmasta. Tämän jälkeen käännettiin tehdyt esimerkkiohjelmat kyseisen kielen kääntäjillä.

H6.1 Hello World eri kielillä

Valitsin kokeiltaviksi ohjelmointikieliksi Javan, C:n sekä C++:n.

H6.1.1 Java

Harjoituksessa käytetty Java-kielinen lähdekoodi HelloWorld.java. Tätä harjoitusta varten tarvitsin Linuxiin sopivan Java-ympäristön, joten asensin sellaisen apt:in avulla:



$ sudo apt-get install sun-java6-jdk

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following extra packages will be installed:

gcc-3.3-base java-common libstdc++5 odbcinst1debian1 sun-java6-bin sun-java6-jre unixodbc

Suggested packages:

equivs binfmt-support sun-java6-demo sun-java6-doc sun-java6-source sun-java6-plugin ia32-sun-java6-plugin sun-java6-fonts libmyodbc

odbc-postgresql libct1

Recommended packages:

gsfonts-x11

The following NEW packages will be installed:

gcc-3.3-base java-common libstdc++5 odbcinst1debian1 sun-java6-bin sun-java6-jdk sun-java6-jre unixodbc

0 upgraded, 8 newly installed, 0 to remove and 3 not upgraded.

Need to get 43.1MB of archives.

After unpacking 128MB of additional disk space will be used.

Do you want to continue [Y/n]? Y

Get:1 http://fi.archive.ubuntu.com gutsy/main java-common 0.26ubuntu1 [77.1kB]

Get:2 http://fi.archive.ubuntu.com gutsy/main odbcinst1debian1 2.2.11-16 [67.3kB]

Get:3 http://fi.archive.ubuntu.com gutsy/main unixodbc 2.2.11-16 [297kB]

Get:4 http://fi.archive.ubuntu.com gutsy/main gcc-3.3-base 1:3.3.6-15ubuntu2 [151kB]

Get:5 http://fi.archive.ubuntu.com gutsy/main libstdc++5 1:3.3.6-15ubuntu2 [296kB]

Get:6 http://fi.archive.ubuntu.com gutsy/multiverse sun-java6-bin 6-03-0ubuntu2 [26.4MB]

Get:7 http://fi.archive.ubuntu.com gutsy/multiverse sun-java6-jre 6-03-0ubuntu2 [6327kB]

Get:8 http://fi.archive.ubuntu.com gutsy/multiverse sun-java6-jdk 6-03-0ubuntu2 [9509kB]

Fetched 43.1MB in 7s (5535kB/s)

Preconfiguring packages ...

Selecting previously deselected package java-common.

(Reading database ... 96385 files and directories currently installed.)

Unpacking java-common (from .../java-common_0.26ubuntu1_all.deb) ...

Selecting previously deselected package odbcinst1debian1.

Unpacking odbcinst1debian1 (from .../odbcinst1debian1_2.2.11-16_i386.deb) ...

Selecting previously deselected package unixodbc.

Unpacking unixodbc (from .../unixodbc_2.2.11-16_i386.deb) ...

Selecting previously deselected package gcc-3.3-base.

Unpacking gcc-3.3-base (from .../gcc-3.3-base_1%3a3.3.6-15ubuntu2_i386.deb) ...

Selecting previously deselected package libstdc++5.

Unpacking libstdc++5 (from .../libstdc++5_1%3a3.3.6-15ubuntu2_i386.deb) ...

Selecting previously deselected package sun-java6-bin.

Unpacking sun-java6-bin (from .../sun-java6-bin_6-03-0ubuntu2_i386.deb) ...

Selecting previously deselected package sun-java6-jre.

Unpacking sun-java6-jre (from .../sun-java6-jre_6-03-0ubuntu2_all.deb) ...

sun-dlj-v1-1 license has already been accepted

Selecting previously deselected package sun-java6-jdk.

Unpacking sun-java6-jdk (from .../sun-java6-jdk_6-03-0ubuntu2_i386.deb) ...

sun-dlj-v1-1 license has already been accepted

Setting up java-common (0.26ubuntu1) ...

Setting up odbcinst1debian1 (2.2.11-16) ...

Setting up unixodbc (2.2.11-16) ...

Setting up gcc-3.3-base (1:3.3.6-15ubuntu2) ...

Setting up libstdc++5 (1:3.3.6-15ubuntu2) ...

Setting up sun-java6-jre (6-03-0ubuntu2) ...

Setting up sun-java6-bin (6-03-0ubuntu2) ...

No theme index file in '/usr/share/icons/sun-java6.png'.

If you really want to create an icon cache here, use --ignore-theme-index.

Setting up sun-java6-jdk (6-03-0ubuntu2) ...

Processing triggers for libc6 ...

ldconfig deferred processing now taking place

$



Asennuksen aikana piti hyväksyä Sunin lisenssiehdot, jotta jdk:n sai asennettua. Jdk ei siis ole vapaa ohjelmisto. Sitten kokeilin kääntää HelloWorld-ohjelmani:



$ javac HelloWorld.java

$ ls -la HelloWorld.*

-rw-r--r-- 1 okoskipa okoskipa 183 2008-05-13 15:38 HelloWorld.c

-rw-r--r-- 1 okoskipa okoskipa 427 2008-05-13 15:56 HelloWorld.class

-rw-r--r-- 1 okoskipa okoskipa 221 2008-05-13 15:40 HelloWorld.cpp

-rw-r--r-- 1 okoskipa okoskipa 213 2008-05-13 15:39 HelloWorld.cpp~

-rw-r--r-- 1 okoskipa okoskipa 282 2008-05-13 15:43 HelloWorld.java

-rw-r--r-- 1 okoskipa okoskipa 284 2008-05-13 15:42 HelloWorld.java~

$



Hakemistoon syntyi käännöksen jälkeen Java-luokka HelloWorld.class. Käännös onnistui ainakin. Seuraavaksi sitten ajoin ohjelman:



$ java HelloWorld

Hello, world!

$



Java-kokeilu onnistui, sillä ohjelma tulosti halutun tekstin.



H6.1.2 C-kieli

Olimme jo asentaneet C-kielen käännösympäristön edellisellä tunnilla, joten lähdin suoraan kääntämään testiohjelmaani HelloWorld.c.



$ make HelloWorld

cc HelloWorld.c -o HelloWorld

$ ls -l

total 20

-rwxr-xr-x 1 okoskipa okoskipa 6449 2008-05-13 16:10 a.out

-rwxr-xr-x 1 okoskipa okoskipa 6449 2008-05-13 16:16 HelloWorld

-rw-r--r-- 1 okoskipa okoskipa 185 2008-05-13 16:09 HelloWorld.c



Ajoin hakemistoon syntyneen suoritettavan ohjelman:



$ ./HelloWorld

Hello, world!$



Lopusta puuttui rivinvaihto näköjään, mutta muuten onnistui käännös ja ajo. Eli näin kääntyi c-kielinen testiohjelma Linuxilla.



H6.1.3 C++

Viimeisenä kokeiluna käänsin vastaavan ohjelman C++-lähdekoodista. Kääntäjä G++ olikin jo asennettu edellisellä oppitunnilla.



$ g++ HelloWorld.cpp -o HelloWorld

$ ls -l

total 12

-rwxr-xr-x 1 okoskipa okoskipa 7948 2008-05-13 16:24 HelloWorld

-rw-r--r-- 1 okoskipa okoskipa 221 2008-05-13 16:06 HelloWorld.cpp

$



Hakemistoon syntyi ainakin ajettava ohjelma, joten kokeilin sitä:



$ ./HelloWorld

Hello, world!$



Sama tyyppivika ilmeni myös tässä C++-versiossa, eli olin unohdanut rivinvaihdon tulostuksesta. Muuten toimi kyllä.