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ä.
Valitsin kokeiltaviksi ohjelmointikieliksi Javan, C:n sekä C++:n.
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.
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.
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ä.