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

1305

    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. Vassarina hymyilyttää vaurastuminen persujen kustannuksella

      Olen sijottanut määrätietoisesti osan Kelan tuista pörssiosakkeisiin, ja salkku on paisunut jo toiselle sadalle tuhanne
      Maailman menoa
      20
      2287
    2. Riikka runnoo: Elisalta potkut 400:lle

      Erinomaisen hallitusohjelman tavoite 100 000 työllistä lisää yksityisellä sektorilla on kohta saavutettu. Toivotaan toiv
      Maailman menoa
      33
      2132
    3. Pääseekö kuka tahansa hoitaja katselemaan kenen tahansa ihmisen terveystietoja?

      "Meeri selaili puhelinta uteliaisuuttaan ja katuu nyt – Moni hoitaja on tehnyt saman rikoksen Tuttujen ihmisten asiat k
      Maailman menoa
      64
      1683
    4. Niinistö neliraajajarrutteli Natoon liittymistä vielä sodan alettua

      Myöntää nyt itsekin, mikä jo aikaisemmin tiedettiin. Marin vei Suomen ja Ruotsin Natoon. "”Myönnän auliisti jarruttelle
      Maailman menoa
      194
      1657
    5. Kokoomus on Suomen kommunistisin puolue

      "Hallituksessa on erimielisyyttä siitä, kuinka suuri osa veronkiristyksestä hyvitetään datakeskuksille uudella erillisel
      Maailman menoa
      80
      1602
    6. Jalankulkija kuoli. Poliisi etsii mustaa BMW Coupe -autoa, jossa on punertavat vanteet.

      Jalankulkija kuoli jäätyään auton alle Joensuussa – kuljettaja pakeni, poliisi pyytää havaintoja https://www.mtvuutiset.
      Joensuu
      52
      1482
    7. Nainen rakas

      Mulle on alkanut tulla sellainen olo että meistä tulee ehkä pariskunta vielä 😌
      Ikävä
      113
      1460
    8. Pyyntö Teelle

      Voisitko nyt vaan ystävällisesti laittaa viestin?
      Ikävä
      83
      1149
    9. Martina haluaa tasoisensa miehen

      Seiskassa juttu minkälaisen miehen Martina haluaa. Kumppanin pitää tuoda hänen herkkyytensä ja vahvuutensa esiin sekä ol
      Kotimaiset julkkisjuorut
      240
      1017
    10. Voi ei! Katja Ståhl joutui sairaalaan - Syynä tämä vitsaus - Koskettava päivitys sairaalasängystä

      Pikaista paranemista, Katja! Katja Ståhl on kertonut somessa joutuneensa sisään sairaalaan. Lue lisää: https://www.suom
      Suomalaiset julkkikset
      21
      905
    Aihe