C, Linux ja kirjastojen oletussijainti ?

Mika0800

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ää ?

10

1245

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • läskipää
    • 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_misc

        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.


      • 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

    1. 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ä
      Maailman menoa
      91
      2920
    2. Pelotelkaa 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 soda
      Maailman menoa
      299
      1686
    3. Mikä 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ä?
      Sinkut
      246
      1567
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1391
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      402
      1384
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      402
      1308
    7. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      1089
    8. Esko 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 tat
      Suomalaiset julkkikset
      38
      1047
    9. Hyvä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 kun
      Maailman menoa
      329
      874
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      257
      855
    Aihe