Linux *.so tiedosto?

Tarvitseeko linuxin ydin kääntää kun asentaa so päätteisen tiedoston koneeseen.
6511
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

Kai se riippuu tiedostosta ja käyttöjärjestelmästä.. Tavallinen kirjastohan tuo on ja jos se ei ydintä käytä niin ei.

Äänestä

.dll

Äänestä

Käyttöjärjestelmähän tuossa otsikossa tulikin mainittua vaikka M_Karilta se taisi mennä vähän ohi. ;)

Kyseessä dynaammisesti linkitetty kirjasto eli Windowsin .dll:ää vastaava.

Linuxissa on kuitenkin kattava riippuvuuksien hallinta joten yksittäisiä kirjastoja ei tarvitse asennella Windowsin dll-hell tapaan yritä_ja erehdy menetelmälllä vaan paketinhallinta lataa automaattisesti tarpeelliset ohjelman asennuksen yhteydessä.

Äänestä

Ei kannata asentaa mitään so-tiedostoja!

Äänestä
  • 1. linuxissa tosiaankin libjotakin.so vastaa windowsin jotakin.dll

    2. Jos linuxiin koodaa ohjelman esim. FreePascal / Lazarus -yhdistelmällä, niin jos ohjelmassa haluaa käyttää apuna C:llä tai C :lla tehtyä koodia, niin kyllä tuossa .so -tiedostoja tarvitaan: käännetään C tai C -kieliset koodit .so -tiedostoksi, ja kirjoitetaan niille import unit FreePascalilla.

    huom: C :n osalta: luokkia EI voi toimivasti exportoida .so:sta (ainakaan niin, että ne toimisivat muista kuin C :lla tehdyistä ohjelmista), joten C -koodin osalta menettely on seuraava:

    1. "exportoitavat" luokat muunnetaan flat -proseduureiksi tähän tapaan:

    jos on vaikkapa:

    int TLuokka::Jotakin(int a)

    niin sen kutsumista varten määritellään tällainen proseduuri: (EI luokkametodi):

    int TLuokka_Jotakin(TLuokka Luokkaviite, int a) {
    return Luokkaviite->Jotakin(a);
    }

    ja vastaavasti luokan konstruktoria varten tällainen:

    TLuokka Luo_Luokka() {
    return new TLuokka(); // tarkista syntaksi !!!
    // Tässä siis on tarkoitus luoda uusi luokan TLuokka ilmentymä, ja palauttaa viite siihen.
    }

    ja vastaavasti destruktori:

    void Tuhoa_Luokka(TLuokka LV) {
    LV->Destroy();
    }

    ja lopuksi:

    nuo exportataan näin:

    extern "C" {

    int TLuokka_Jotakin(TLuokka Luokkaviite, int a);
    TLuokka Luo_Luokka();
    void Tuhoa_Luokka(TLuokka LV);

    }


    Syntaksissa voi olla virheitä, joku C :aa paremmin osaava voi korjata ne.

    Mutta periaatetasolla juuri näin voi exportoida flat -proseduureiksi muunnettuja C -luokkia, joita voi sitten importoida FreePascaliin, ja niille voi halutessaan kirjoittaa FreePascaliin -luokkawrapperin; tällainen kikkailu on tarpeen, koska C :n ja FreePascalin luokat eivät ole teknisesti sama asia, vaikka toteuttavatkin samoja pääperiaatteita.

    .so linuxissa, samoin kuin .dll windowsissa, on hyödyllinen kehittäjän työkalu, varsinkin silloin, jos haluaa kirjoittaa oman ohjelmansa FreePascalilla, mutta joutuu käyttämään muiden tekemää C:llä tai C :lla käännettyä koodia, ja tämä tilannehan tulee linuxissa aika usein vastaan.

    Äänestä

Yleisesti: kerneliä ei tarvitse uudelleenkääntää.

Sensijaan linuxissa yleensä tarvitsee päivittää tiedostoa:

/etc/ld.so.conf

ja tuon jälkeen pitää vielä ajaa linuxin mukana tuleva työkaluohjelma komentoriviltä:

ldconfig

(parametreja ei yleensä tarvita, mutta ldconfig täytyy ajaa root -oikeuksin; ubuntuilijat siis sudo ldconfig).

Äänestä

Kommentoi aloitusta


ööÖööö... kirjoitti:

Tarvitseeko linuxin ydin kääntää kun asentaa so päätteisen tiedoston koneeseen.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu