Sziasztok.
Érdekelne, van e rá valami mód vagy program, amivel forrásból telepített csomagból ki lehet nyerni milyen függőségekre lesz szükség. Azt tudom, ha lefuttatom a configure -t akkor úgy is jelzi mik hiányoznak. De mondjuk lehet listát csinálni a hiányzó csomagokról?
- 1845 megtekintés
Hozzászólások
Nyelv fuggo. Vannak nyelvek, ahol szokas a fuggosegeket egy jol parsolhato fileban (requirements.txt, package.json, stb) tarolni. C eseteben ilyen nem nagyon van.
--
|8]
- A hozzászóláshoz be kell jelentkezni
Gondolom, nem minden forrás tartalmazza ilyen file-t. Meg szerintem az összes függőség benne van. Én arra lenék kíváncsi, ha mondjuk forgatnék egy csomagot, tetszőleges config opciókkal, akkor annak ki lehet e listázni, hogy épp milyen függőségek kellenek.
- A hozzászóláshoz be kell jelentkezni
De hát miért nem jó neked a configure?
- A hozzászóláshoz be kell jelentkezni
Nem, megbizhatoan nem lehet. Nezhetsz ldd-vel shared library dependencyket, es abbol vissza lehet kovetni, hogy mely csomaghoz tartozik (dpkg-shlibdeps valami ilyesmit csinal), es bar ez sok esetben mukodik, ha dinamikusan, futas idoben tud betolteni modulokat, vagy libeket, akkor nem.
Es ez is csak a dependenciak egy reszet tarja fel. Dependalhat meg egy rakas olyan dologra ami linkelesnel nem latszik.
--
|8]
- A hozzászóláshoz be kell jelentkezni
Milyen megbízható mód van a függőségek kinyerésére? Biztos van valami mód amivel ki lehet nyerni a szükséges adatokat.
- A hozzászóláshoz be kell jelentkezni
Nincs ilyen. Kozelitesek vannak, amik tobbnyire mukodnek. Olyan, ami mindig 100%-ot nyujt, nincsen.
--
|8]
- A hozzászóláshoz be kell jelentkezni
Adj egy konkrét programot!
- A hozzászóláshoz be kell jelentkezni
Tesztnek a nano-t és az mc-t használom. Ezeken szeretném kikísérletezni.
- A hozzászóláshoz be kell jelentkezni
Nézzük az mc-t, ahhoz több dolog kell.
Itt speciel az INSTALL fájl nyújthat támpontot, ahol a függőségek fel vannak sorolva. Nyilván nincs minden forrás mellé adva egy INSTALL fájl. Lehet, hogy ez egy REQ, README vagy hasonló lesz. De még ha sikerülne is kitalálni, hogy melyik fájlban lesznek a szükséges dolgok, nehéz lenne feldolgozni. Hiszen a legtöbbször angol mondatok között szerepel egy felsorolás-szerűség. De ha még véletlenül ezt is csak sikerülne feldolgozni, akkor se vagyunk nagyon előre, hiszen sok disztróban a -dev csomagok külön vannak (amelyekben pl. a header-fájlok szerepelnek). Honnan tudjuk, hogy elegendő a glib2 vagy van egy glib2-dev (vagy glib2-devel vagy glib2-headers) csomag, ami a fordításhoz kelleni fog? Vagy akár lehet, hogy nem is glib2 néven fut a csomag, hanem glib vagy glib2x. Nekem reménytelennek tűnik egy, legalább néhány esetben működő megoldás találása.
Ami még lehetséges: a forrás feldolgozása. Ha C/C++ nyelven írodott, esetleg a #include
sorokkal lehetne valamit kezdeni. De honnan fogod tudni, hogy a foo.h
melyik csomagban található? Ehhez kellene egy adatbázis (vagy akár neten is lehet próbálkozni kereséssel). Ha nem C/C++ nyelven írodott, akkor tudni kell, hogy perl/python/php/ruby/go/java/... esetén mit kell keresni.
- A hozzászóláshoz be kell jelentkezni
Ha esetleg létezik hozzá Debian vagy RPM csomag, akkor a Debian forrásból illetve a src.rpm -ből össze lehet mazsolázni.
- A hozzászóláshoz be kell jelentkezni
Csomag tuti, hogy létezik. Csakhogy, egyedi config options esetén nem sok hasznát veszem.
- A hozzászóláshoz be kell jelentkezni
Nincs. És persze a configure sikeres lefutása sem garantál semmit, azt is emberek csinálták, csak az van benne, amit nem felejtettek ki belőle.
- A hozzászóláshoz be kell jelentkezni
Vagyis ha jól értem, egy linuxos dependency walker kéne neked. Ezen az irányon elindulva hirtelen ezeket találtam:
http://www.purinchu.net/software/elflibviewer.php
https://sourceforge.net/projects/binscan/
egy próbát talán megérnek, sajnos nem tudtam kipróbálni hogy tényleg jól mennek-e, ha esetleg nem akkor ezen az úton lehet tovább keresgélni :)
Edit: Ühm, lehet ezt egy picit félreértettem, ez fordítás előtt nem játszik -.- viszont ha megvan a forrás abból ki lehet vadászni :)
- A hozzászóláshoz be kell jelentkezni
Ki lehet vadászni? Hogyan? Amiről eddig tudtam az forgatás közben jelzi ha valami hiány van.
- A hozzászóláshoz be kell jelentkezni
Vagy még azt sem teszi, csak szimplán megáll valami random fordítási hibával, aztán legózd ki, hogy mi a baja.
- A hozzászóláshoz be kell jelentkezni
Ez már az adott programnyelvtől függ, hogy az hogyan húzza be a külső függőségeket. Include/import hasonló dolgokat néznék meg első körben.
- A hozzászóláshoz be kell jelentkezni
Öööö, az a gond, hogy a #include-ot a configure szépen kikonfigurálja, hiszen nincs meg a lib/include fájl. Viszont a kód később szeretne random függvényt, vagy rosszabb esetben makrót/típusdefiníciót használni - na eleve jöjjél rá, hogy a hibaüzenet miért is van (mondjuk pl. ha egy típusdefiníció hibádzik, akkor azt változónévnek fogja gondolni a C, ergó valami totál random syntax error lesz belőle, amit megérteni is kihívás), aztán találd ki, hogy vajon az az izé, na az melyik lib/csomag include fájljából kellett volna jöjjön.
- A hozzászóláshoz be kell jelentkezni
Ez szerintem autoconf / automake definíciós hiba, ha ilyen van, mert a configure-nak össze kéne esnie, ha egy required header / lib nincs meg. Ettől függetlenül láttunk már rosszul megírt autoconf fájlt, és nem nyújtott elégtételt, hogy tudtuk ki a hibás...:)
- A hozzászóláshoz be kell jelentkezni
TL;DR
Az, amit szeretnél, az nem létezik.
- A hozzászóláshoz be kell jelentkezni
forrásból telepített csomagból
Ha a csomag már telepítve van, azaz sikeresen lefordult, az ldd
sokszor praktikus lehet:
$ ldd /usr/local/bin/mc
/usr/local/bin/mc:
libslang.so.2 => /usr/local/lib/libslang.so.2 (0x80092b000)
libncurses.so.8 => /lib/libncurses.so.8 (0x800e14000)
libssh2.so.1 => /usr/local/lib/libssh2.so.1 (0x801061000)
libgmodule-2.0.so.0 => /usr/local/lib/libgmodule-2.0.so.0 (0x80128b000)
libglib-2.0.so.0 => /usr/local/lib/libglib-2.0.so.0 (0x80148e000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x801799000)
libthr.so.3 => /lib/libthr.so.3 (0x8019a4000)
libc.so.7 => /lib/libc.so.7 (0x801bc9000)
libm.so.5 => /lib/libm.so.5 (0x801f76000)
libz.so.6 => /lib/libz.so.6 (0x80219f000)
libssl.so.7 => /usr/lib/libssl.so.7 (0x8023b5000)
libcrypto.so.7 => /lib/libcrypto.so.7 (0x802621000)
libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x802a16000)
libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x802d10000)
- A hozzászóláshoz be kell jelentkezni
Esetleg nézd meg az adott program gentoo-féle ebuild-jét, abból könnyen csinálhatsz (opció-függő) listát :)
- A hozzászóláshoz be kell jelentkezni
Ha tényleg nincs semmi más megoldás, akkor ez járható útnak tűnik. Bár remélem, van azért valami más megoldás is.
- A hozzászóláshoz be kell jelentkezni
Ja. Átnézed a kódot. Más nincs.
--
♙♘♗♖♕♔
- A hozzászóláshoz be kell jelentkezni
configure.in vagy a makefile.in fájlokból lehet kinyerni. Ezeket az autotools eszi meg. Nem fehér embernek való meló. Ezért külön szakma a maintainerek.
--
GPLv3-as hozzászólás.
- A hozzászóláshoz be kell jelentkezni
Az autotools nem csak a C be írt programoknál használható?
- A hozzászóláshoz be kell jelentkezni
nem
- A hozzászóláshoz be kell jelentkezni