Tällä sivulla:
http://www.linux-foundation.org/docs/lsbbook/pam.html
on esimerkki pam -autentikoinnista.
Kokeilin copypasteta tuon tiedostoksi koe1.c
käännös kuitenkin törmää virheilmoitukseen:
mika0800@amd2300:~/clangtest$ gcc -o koe1 koe1.c
koe1.c:1:31: error: security/pam_appl.h: No such file or directory
koe1.c:2:31: error: security/pam_misc.h: No such file or directory
tuosta voi päätellä, että gcc yrittää (turhaan) etsiä oletushakemiston alihakemistosta security tiedostoja pam_appl.h ja pam_misc.h
1. On varmaankin joku järkevä keino kertoa gcc:lle, mikä on se perushakemisto, jonka alihakemisto tuo security on. Miten ?
2. Onko koneessani varmasti jossain kyseinen security -hakemisto. Jos ei, mitä pitää asentaa (KUbuntu) jotta kyseiset pam -modulit asennetaan.
3. (mahd. kohdan 2. toimenpiteiden jälkeen): onko joku standardi perushakemisto, jonka alihakemistona tuo security pitäisi olla, vai joudunko etsimään esim. find -komennolla ?
Tässä onkin olennaisin eroi windows- ja linuxohjelmoinnin välillä. Jos windowsiin asentaa vaikkapa VC :n, niin VC:n asennusohjelma asentaa useimmin tarvitut tiedostot sekä laittaa VC :n oletusasetuksiin tiedon siitä, mikä on asennettujen lähkdekooditiedostojen (.h, .c ja .cpp) asennushakemisto, tai perushakemisto, johon suhteellisena noita polkunimiä ratkaistaan. Linuxin asennuksen jäljiltä gcc:lle ei ole annettu vastaavia oletussijainteja automaattisesti, joten nuo ilmeisesti linuxissa jäävät käyttäjän ongelmaksi selvittää ja laittaa kohdalleen, jotta c -ohjelmia voisi kääntää.
Ja vielä: muuttuuko oman koneeni autentikointitapa jotenkin pelkästään tuon pam -systeemin asentamisesta, vai onko se vain modernimpi standardi, joka oletuksena tekee asiat kuten ennenkin, mutta mahdollistaa asioiden myöhemmän muuttamisen siten, ettei eri ohjelmia tarvitse siinä vaiheessa uudellenkääntää ?
C, Linux ja kirjastojen oletussijainti ?
10
1245
Vastaukset
- läskipää
Dev-paketti puuttuu eli käytännössä headerit security/pam_appl.h ja security/pam_misc.h
Esim. ubuntussa: "libpam0g-dev - Development files for PAM"
http://packages.ubuntu.com/gutsy/libdevel/libpam0g-dev
Paketin tiedostot:
http://packages.ubuntu.com/cgi-bin/search_contents.pl?searchmode=filelist&word=libpam0g-dev&version=gutsy&arch=i386
(Hassua että päädyit *heti* kokemuksen syvällä rintaäänellä vertailemaan: "Tässä onkin olennaisin eroi windows- ja linuxohjelmoinnin välillä...") - läskipää
Siis asenna distrosi pakettihallinnan kautta tuo PAM:n dev-paketti (paketin nimi vaihtelee distroissa)
- läskipää
Pitipä vielä ihan kokeilla ko. sorsaa eli kääntyy komennolla:
gcc koe.c -o koe -lpam -lpam_misc - Mika0800
läskipää kirjoitti:
Pitipä vielä ihan kokeilla ko. sorsaa eli kääntyy komennolla:
gcc koe.c -o koe -lpam -lpam_misc1. Kun tiedetään, että tiedostot pam_appl.h ja pam_misc.h puuttuvat, miten noista puuttuvien tiedostojen nimistä saa selville, että tarvittavan paketin nimi on libpam0g-dev ?
Onko tähän jokin sellainen tapa, jonka voisi jopa automatisoida, ts. kun asian selvitysohjelmalle annetaan syötteeksi:
pam_appl.h pam_misc.h
niin ko. selvitysohjelma tulostaisi:
libpam0g-dev
2. Mistä tietää, että kääntäjälle pitää antaa optio:
-lpam -lpam_misc
?
3. Olettaisin, että VC :ssa (jos windowsissa nyt yleensäkään on pam:ia), olisi asia hoidettu siten, että pelkästään noiden
pam_appl.h ja pam_misc.h -tiedostojen määrittely projektiin riittää, kaikki muu asiaan liittyvä tapahtuu automaattisesti.
VC :aa olen käyttänyt hyvin vähän, mutta esim. jos sama tehtäisiin Delphillä, siinä pitäisi tehdä 1 (tai 2) asiaa:
1. (joka tapauksessa):
// moduliin, joka pam -funktioita tarvitsevat:
uses
pam_appl, pam_misc;
2. Jos kyseiset modulit kuuluvat ko. Delphin versioon, muuta ei tarvitse tehdä, sillä Delphin mukana tulevien unitien osalta Delphi tietää automaattisesti, mistä hakemistosta nuo löytyvät; mitään optioita tai määrityksiä ei tällöin tarvitse tehdä.
Jos kyse on 3. osapuolen toimittamista uniteista, jotka eivät kuulu Delphin vakiokokoonpanoon, silloin täytyy kyseiset unitit lisätä projektiin; tähän tarvitaan myös polkunimet.
Jos kuitenkin laittaa rastin kohtaan "Save as Delphi Default", niin tällöin, jos myöhemmin luo toisenkin uuden projektin, jossa ko. tiedostoja tarvitaan, niin nämä löytyvät automaattisesti pelkällä tiedostonimellä ilman polkua; tässä hyödynnetään tuota aiemmin "Delphi default" -asetuksen teon yhteydessä syötettyä tietoa.
Ilmeisesti komentorivikääntäjissä automaatio ei ole näin pitkällä, vaan niille pitää antaa lisäparametreja. - Siis häh?
Mika0800 kirjoitti:
1. Kun tiedetään, että tiedostot pam_appl.h ja pam_misc.h puuttuvat, miten noista puuttuvien tiedostojen nimistä saa selville, että tarvittavan paketin nimi on libpam0g-dev ?
Onko tähän jokin sellainen tapa, jonka voisi jopa automatisoida, ts. kun asian selvitysohjelmalle annetaan syötteeksi:
pam_appl.h pam_misc.h
niin ko. selvitysohjelma tulostaisi:
libpam0g-dev
2. Mistä tietää, että kääntäjälle pitää antaa optio:
-lpam -lpam_misc
?
3. Olettaisin, että VC :ssa (jos windowsissa nyt yleensäkään on pam:ia), olisi asia hoidettu siten, että pelkästään noiden
pam_appl.h ja pam_misc.h -tiedostojen määrittely projektiin riittää, kaikki muu asiaan liittyvä tapahtuu automaattisesti.
VC :aa olen käyttänyt hyvin vähän, mutta esim. jos sama tehtäisiin Delphillä, siinä pitäisi tehdä 1 (tai 2) asiaa:
1. (joka tapauksessa):
// moduliin, joka pam -funktioita tarvitsevat:
uses
pam_appl, pam_misc;
2. Jos kyseiset modulit kuuluvat ko. Delphin versioon, muuta ei tarvitse tehdä, sillä Delphin mukana tulevien unitien osalta Delphi tietää automaattisesti, mistä hakemistosta nuo löytyvät; mitään optioita tai määrityksiä ei tällöin tarvitse tehdä.
Jos kyse on 3. osapuolen toimittamista uniteista, jotka eivät kuulu Delphin vakiokokoonpanoon, silloin täytyy kyseiset unitit lisätä projektiin; tähän tarvitaan myös polkunimet.
Jos kuitenkin laittaa rastin kohtaan "Save as Delphi Default", niin tällöin, jos myöhemmin luo toisenkin uuden projektin, jossa ko. tiedostoja tarvitaan, niin nämä löytyvät automaattisesti pelkällä tiedostonimellä ilman polkua; tässä hyödynnetään tuota aiemmin "Delphi default" -asetuksen teon yhteydessä syötettyä tietoa.
Ilmeisesti komentorivikääntäjissä automaatio ei ole näin pitkällä, vaan niille pitää antaa lisäparametreja."Ilmeisesti komentorivikääntäjissä automaatio ei ole näin pitkällä, vaan niille pitää antaa lisäparametreja."
Edellisessä kerrottiin mitä kirjastoja tulee käyttää. Viimeksi kun katsoin niin ei VC :kaan osannut niitä itsekseen projektiin lisätä (vaikkakin turhia kirjastoja lisätään projektiin kysymättäkin ja kääntäminen hidastuu).
Kyllä gcc yhden paskan mäsän luomuksen voittaa. - läskipää
Mika0800 kirjoitti:
1. Kun tiedetään, että tiedostot pam_appl.h ja pam_misc.h puuttuvat, miten noista puuttuvien tiedostojen nimistä saa selville, että tarvittavan paketin nimi on libpam0g-dev ?
Onko tähän jokin sellainen tapa, jonka voisi jopa automatisoida, ts. kun asian selvitysohjelmalle annetaan syötteeksi:
pam_appl.h pam_misc.h
niin ko. selvitysohjelma tulostaisi:
libpam0g-dev
2. Mistä tietää, että kääntäjälle pitää antaa optio:
-lpam -lpam_misc
?
3. Olettaisin, että VC :ssa (jos windowsissa nyt yleensäkään on pam:ia), olisi asia hoidettu siten, että pelkästään noiden
pam_appl.h ja pam_misc.h -tiedostojen määrittely projektiin riittää, kaikki muu asiaan liittyvä tapahtuu automaattisesti.
VC :aa olen käyttänyt hyvin vähän, mutta esim. jos sama tehtäisiin Delphillä, siinä pitäisi tehdä 1 (tai 2) asiaa:
1. (joka tapauksessa):
// moduliin, joka pam -funktioita tarvitsevat:
uses
pam_appl, pam_misc;
2. Jos kyseiset modulit kuuluvat ko. Delphin versioon, muuta ei tarvitse tehdä, sillä Delphin mukana tulevien unitien osalta Delphi tietää automaattisesti, mistä hakemistosta nuo löytyvät; mitään optioita tai määrityksiä ei tällöin tarvitse tehdä.
Jos kyse on 3. osapuolen toimittamista uniteista, jotka eivät kuulu Delphin vakiokokoonpanoon, silloin täytyy kyseiset unitit lisätä projektiin; tähän tarvitaan myös polkunimet.
Jos kuitenkin laittaa rastin kohtaan "Save as Delphi Default", niin tällöin, jos myöhemmin luo toisenkin uuden projektin, jossa ko. tiedostoja tarvitaan, niin nämä löytyvät automaattisesti pelkällä tiedostonimellä ilman polkua; tässä hyödynnetään tuota aiemmin "Delphi default" -asetuksen teon yhteydessä syötettyä tietoa.
Ilmeisesti komentorivikääntäjissä automaatio ei ole näin pitkällä, vaan niille pitää antaa lisäparametreja."1. Kun tiedetään, että tiedostot pam_appl.h ja pam_misc.h puuttuvat, miten noista puuttuvien tiedostojen nimistä saa selville, että tarvittavan paketin nimi on libpam0g-dev ?"
Haku tuolta http://packages.ubuntu.com/
Tai haku konsolissa:
apt-cache search Pluggable Authentication Module
Tulostuksesta voi "arvata" että "libpam0g-dev - Development files for PAM" on tarvittava paketti.
"Onko tähän jokin sellainen tapa, jonka voisi jopa automatisoida,"
Eipä oikein, koska voi olla useita samannimisiä header-tiedostoja.
"2. Mistä tietää, että kääntäjälle pitää antaa optio:"
Lukemalla ko. kirjaston dokumentaatiota tai esim. näin:
gcc koe.c -o koe
/tmp/ccm6XZuh.o: In function `main':
koe.c:(.text 0x30): undefined reference to `pam_start'
koe.c:(.text 0x4c): undefined reference to `pam_authenticate'
koe.c:(.text 0x6f): undefined reference to `pam_get_item'
koe.c:(.text 0xa0): undefined reference to `pam_strerror'
koe.c:(.text 0xba): undefined reference to `pam_end'
/tmp/ccm6XZuh.o:(.data 0x0): undefined reference to `misc_conv'
collect2: ld returned 1 exit status
Jaaha linkkeri (ld) valittaa kirjaston puuttumista ... arvataan että se olisi libpam:
gcc koe.c -o koe -lpam
/tmp/ccKZ2pBw.o:(.data 0x0): undefined reference to `misc_conv'
collect2: ld returned 1 exit status
Jaa, jotain vielä puuttuu joten listataan libpam0g-dev:n .so-tiedostot (=dynaamisesti linkitettävät vrt. dll):
dpkg -L libpam0g-dev | grep \.so
/usr/lib/libpam_misc.so
/usr/lib/libpamc.so
/usr/lib/libpam.so
Kokeilaan libpam_misc.so:
gcc koe.c -o koe -lpam -lpam_misc
Kääntyi.
"2. Jos kyseiset modulit kuuluvat ko. Delphin versioon, muuta ei tarvitse tehdä, sillä Delphin mukana tulevien unitien osalta Delphi tietää automaattisesti, mistä hakemistosta nuo löytyvät; mitään optioita tai määrityksiä ei tällöin tarvitse tehdä."
Näin myös C:ssä
jos koodissa on
#include
Niin kääntyy ilman optioita.
Luepa vaikka kohta "3 Compilation options":
http://www.network-theory.co.uk/docs/gccintro/index.html
Kun ohjelmassa on useita tiedostoja niin käytetään ns. "autotools"-työkaluja:
http://www.cs.uku.fi/kurssit/okb2003/book1.html (luvut 4-8)
Tai IDE:ä (Anjuta, KDevelop), koska sulla on kubuntu niin kokeilepa tuota KDevelopia (josta muistaakseni löytyy myös konsoliprojekti vaihtoehto). - TRRY
läskipää kirjoitti:
"1. Kun tiedetään, että tiedostot pam_appl.h ja pam_misc.h puuttuvat, miten noista puuttuvien tiedostojen nimistä saa selville, että tarvittavan paketin nimi on libpam0g-dev ?"
Haku tuolta http://packages.ubuntu.com/
Tai haku konsolissa:
apt-cache search Pluggable Authentication Module
Tulostuksesta voi "arvata" että "libpam0g-dev - Development files for PAM" on tarvittava paketti.
"Onko tähän jokin sellainen tapa, jonka voisi jopa automatisoida,"
Eipä oikein, koska voi olla useita samannimisiä header-tiedostoja.
"2. Mistä tietää, että kääntäjälle pitää antaa optio:"
Lukemalla ko. kirjaston dokumentaatiota tai esim. näin:
gcc koe.c -o koe
/tmp/ccm6XZuh.o: In function `main':
koe.c:(.text 0x30): undefined reference to `pam_start'
koe.c:(.text 0x4c): undefined reference to `pam_authenticate'
koe.c:(.text 0x6f): undefined reference to `pam_get_item'
koe.c:(.text 0xa0): undefined reference to `pam_strerror'
koe.c:(.text 0xba): undefined reference to `pam_end'
/tmp/ccm6XZuh.o:(.data 0x0): undefined reference to `misc_conv'
collect2: ld returned 1 exit status
Jaaha linkkeri (ld) valittaa kirjaston puuttumista ... arvataan että se olisi libpam:
gcc koe.c -o koe -lpam
/tmp/ccKZ2pBw.o:(.data 0x0): undefined reference to `misc_conv'
collect2: ld returned 1 exit status
Jaa, jotain vielä puuttuu joten listataan libpam0g-dev:n .so-tiedostot (=dynaamisesti linkitettävät vrt. dll):
dpkg -L libpam0g-dev | grep \.so
/usr/lib/libpam_misc.so
/usr/lib/libpamc.so
/usr/lib/libpam.so
Kokeilaan libpam_misc.so:
gcc koe.c -o koe -lpam -lpam_misc
Kääntyi.
"2. Jos kyseiset modulit kuuluvat ko. Delphin versioon, muuta ei tarvitse tehdä, sillä Delphin mukana tulevien unitien osalta Delphi tietää automaattisesti, mistä hakemistosta nuo löytyvät; mitään optioita tai määrityksiä ei tällöin tarvitse tehdä."
Näin myös C:ssä
jos koodissa on
#include
Niin kääntyy ilman optioita.
Luepa vaikka kohta "3 Compilation options":
http://www.network-theory.co.uk/docs/gccintro/index.html
Kun ohjelmassa on useita tiedostoja niin käytetään ns. "autotools"-työkaluja:
http://www.cs.uku.fi/kurssit/okb2003/book1.html (luvut 4-8)
Tai IDE:ä (Anjuta, KDevelop), koska sulla on kubuntu niin kokeilepa tuota KDevelopia (josta muistaakseni löytyy myös konsoliprojekti vaihtoehto).packages.ubuntu.comin haulla voikin näköjään tehdä juuri sen, mitä olen halunnut tehdä apt-komentorivityökaluilla jo kauan: hakea pakettia kaipaamansa tiedoston perusteella.
Kirjoitin siksi skriptin "apt-search-file", jolla saa haettua esimerkiksi alkuperäisen kysyjän kaipaaman tiedon komennolla
apt-search-file pam_appl.h
Ohessa skripti siltä varalta, että joku muukin on kaivannut vastaavaa työkalua.
Voit asentaa skriptin suorittamalla roottina komennon
cat > /usr/local/bin/apt-search-file
kopioimalla tässä vaiheessa terminaaliin alla olevan koodin, painamalla enter ja ctrl-d, ja lopuksi suorittamalla komennon
chmod a rx /usr/local/bin/apt-search-file
Jos käytät jotakin muuta Ubuntua kuin dapperia, muista vaihtaa UBUNTU_VERSION-kohtaan oman versiosi nimi (esim. edgy, feisty, gutsy tai hardy). Voit tarkistaa käyttämäsi version tiedostosta /etc/apt/sources.list.
*** koodi
#!/bin/bash
# License: MIT
# Copyright: [email protected]
# Check your Ubuntu version in /etc/apt/sources.list
# You might want to use edgy, feisty, gutsy or hardy
UBUNTU_VERSION=dapper
UBUNTU_ARCH=i386
FILENAME=$1
if [ "$FILENAME" == "" ]; then
echo "Usage: apt-search-file FILENAME"
echo ""
echo "This program lists Ubuntu $UBUNTU_VERSION ($UBUNTU_ARCH) packages that provide FILENAME."
exit
fi
# The URL is defined in parts due to problems in
# posting it to a broken discussion forum (suomi24.fi).
URL="http:"
URL="$URL//packages.ubuntu.com/cgi-bin/search_contents.pl"
URL="$URL?word=$FILENAME&searchmode=searchfiles&case=insensitive"
URL="$URL&version=$UBUNTU_VERSION&arch=$UBUNTU_ARCH"
wget -q -O- "$URL" \
| gawk '//{p=1}{if (p==1 && $2!="") print | "sed \"s:]*>::g\""}//{p=0}' - läskipää
TRRY kirjoitti:
packages.ubuntu.comin haulla voikin näköjään tehdä juuri sen, mitä olen halunnut tehdä apt-komentorivityökaluilla jo kauan: hakea pakettia kaipaamansa tiedoston perusteella.
Kirjoitin siksi skriptin "apt-search-file", jolla saa haettua esimerkiksi alkuperäisen kysyjän kaipaaman tiedon komennolla
apt-search-file pam_appl.h
Ohessa skripti siltä varalta, että joku muukin on kaivannut vastaavaa työkalua.
Voit asentaa skriptin suorittamalla roottina komennon
cat > /usr/local/bin/apt-search-file
kopioimalla tässä vaiheessa terminaaliin alla olevan koodin, painamalla enter ja ctrl-d, ja lopuksi suorittamalla komennon
chmod a rx /usr/local/bin/apt-search-file
Jos käytät jotakin muuta Ubuntua kuin dapperia, muista vaihtaa UBUNTU_VERSION-kohtaan oman versiosi nimi (esim. edgy, feisty, gutsy tai hardy). Voit tarkistaa käyttämäsi version tiedostosta /etc/apt/sources.list.
*** koodi
#!/bin/bash
# License: MIT
# Copyright: [email protected]
# Check your Ubuntu version in /etc/apt/sources.list
# You might want to use edgy, feisty, gutsy or hardy
UBUNTU_VERSION=dapper
UBUNTU_ARCH=i386
FILENAME=$1
if [ "$FILENAME" == "" ]; then
echo "Usage: apt-search-file FILENAME"
echo ""
echo "This program lists Ubuntu $UBUNTU_VERSION ($UBUNTU_ARCH) packages that provide FILENAME."
exit
fi
# The URL is defined in parts due to problems in
# posting it to a broken discussion forum (suomi24.fi).
URL="http:"
URL="$URL//packages.ubuntu.com/cgi-bin/search_contents.pl"
URL="$URL?word=$FILENAME&searchmode=searchfiles&case=insensitive"
URL="$URL&version=$UBUNTU_VERSION&arch=$UBUNTU_ARCH"
wget -q -O- "$URL" \
| gawk '//{p=1}{if (p==1 && $2!="") print | "sed \"s:]*>::g\""}//{p=0}'Joo, hyvin ja nopeasti skripti toimii. Tuon vikan rivin komennon gawk voi vaihtaa awk, joka ymmärtääkseni on ubuntujen perusasennuksessa valmiina, tai sitten vain asentaa paketin gawk.
(Kumma, että jos hakee apt-search-file awk niin:
FILE PACKAGE
usr/lib/9base/bin/awk utils/9base [universe]
usr/lib/freebsd/awk devel/freebsd5-buildutils [universe]
usr/share/quilt/compat/awk devel/quiltawk
Vaikka "locate awk" sanoo sijainin:
/usr/bin/awk
Hmm... ) - Mika0800
TRRY kirjoitti:
packages.ubuntu.comin haulla voikin näköjään tehdä juuri sen, mitä olen halunnut tehdä apt-komentorivityökaluilla jo kauan: hakea pakettia kaipaamansa tiedoston perusteella.
Kirjoitin siksi skriptin "apt-search-file", jolla saa haettua esimerkiksi alkuperäisen kysyjän kaipaaman tiedon komennolla
apt-search-file pam_appl.h
Ohessa skripti siltä varalta, että joku muukin on kaivannut vastaavaa työkalua.
Voit asentaa skriptin suorittamalla roottina komennon
cat > /usr/local/bin/apt-search-file
kopioimalla tässä vaiheessa terminaaliin alla olevan koodin, painamalla enter ja ctrl-d, ja lopuksi suorittamalla komennon
chmod a rx /usr/local/bin/apt-search-file
Jos käytät jotakin muuta Ubuntua kuin dapperia, muista vaihtaa UBUNTU_VERSION-kohtaan oman versiosi nimi (esim. edgy, feisty, gutsy tai hardy). Voit tarkistaa käyttämäsi version tiedostosta /etc/apt/sources.list.
*** koodi
#!/bin/bash
# License: MIT
# Copyright: [email protected]
# Check your Ubuntu version in /etc/apt/sources.list
# You might want to use edgy, feisty, gutsy or hardy
UBUNTU_VERSION=dapper
UBUNTU_ARCH=i386
FILENAME=$1
if [ "$FILENAME" == "" ]; then
echo "Usage: apt-search-file FILENAME"
echo ""
echo "This program lists Ubuntu $UBUNTU_VERSION ($UBUNTU_ARCH) packages that provide FILENAME."
exit
fi
# The URL is defined in parts due to problems in
# posting it to a broken discussion forum (suomi24.fi).
URL="http:"
URL="$URL//packages.ubuntu.com/cgi-bin/search_contents.pl"
URL="$URL?word=$FILENAME&searchmode=searchfiles&case=insensitive"
URL="$URL&version=$UBUNTU_VERSION&arch=$UBUNTU_ARCH"
wget -q -O- "$URL" \
| gawk '//{p=1}{if (p==1 && $2!="") print | "sed \"s:]*>::g\""}//{p=0}'Eipä tuo skripti toimi.
Muutin siihen "gutsy" koska oma KUbuntuversioni on 7.10.
asensin myös gawk:n, mutta skripti sellaisenaan ei silti toimi.
toki, jos tuon | gawk ...
kohdan korvaa vaikkapa tällä:
>tulokset.htm
niin em. tiedostosta voi sen jälkeen manuaalisesti käydä katsomassa mistä paketista tiedosto löytyy.
tuo gawk antaa tällaisen virheilmoituksen:
./etsipaketti: line 29: syntax error near unexpected token `|'
./etsipaketti: line 29: `| gawk '//{p=1}{if (p==1 && $2!="") print | "sed \"s:]*>::g\""}//{p=0}''
ennen tuota kyseinen html -sisältö tulostuu raakamuodossa konsolille.
- Mikb
Kohtaan 1:
cpp -v tulostaa esimerkiksi:
Reading specs from /usr/lib/gcc/..
...
#include "..." search starts here:
#include search starts here:
/usr/local/include
/usr/lib/gcc/jotain/include
/usr/include
End of search list.
...
cpp:n ja gcc:n optio -I on myös ystävä.
Ketjusta on poistettu 1 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos
Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä912920Pelotelkaa niin paljon kuin sielu sietää.
Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda2991686Mikä saa ihmisen tekemään tällaista?
Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?2461567- 871391
IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!
Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel4021384Nyt kun Pride on ohi 3.0
Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että4021308Kiitos nainen
Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik21089Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa
Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat381047Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?
Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun329874Miksi Purra-graffiti ei nyt olekkaan naisvihaa?
"Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden257855