Tarvitseeko linuxin ydin kääntää kun asentaa so päätteisen tiedoston koneeseen.
Linux *.so tiedosto?
ööÖööö...
6511
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Turvaa tilisi vahvistamalla puhelinnumerosi. Voit silloin palauttaa unohtuneen salasanan tekstiviestillä.
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
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.
.dll
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ä.
Ei kannata asentaa mitään so-tiedostoja!
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.
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).