Kirjoittaja Aihe: [ratkaistu]"bash-ongelma" eli vanhan käännöksen puuttuvat kirjastot  (Luettu 2722 kertaa)

teele

  • Käyttäjä
  • Viestejä: 851
    • Profiili
Yritin saada pientä muunnosohjelmaa toimimaan hakemistossa ~/markkinointi, ja alla on tulos.

Onkohan tänään tullut käpisteltyä liikaa, kun en millään ymmärrä, miksi muunnos01 ei käynnisty.

Koodia: [Valitse]
mini@acer:~$ cd markkinointi
mini@acer:~/markkinointi$ ls
ainestietokansio  kohdeXXX    ktau06.cpp~    ohjeita01.tks~
k40.ods           ktau06      muunnos01      oo-temp.csv
k41.ods           ktau06.cpp  ohjeita01.tks  oo-temp.csv~
mini@acer:~/markkinointi$ ./muunnos01
bash: ./muunnos01: Tiedostoa tai hakemistoa ei ole

« Viimeksi muokattu: 10.12.12 - klo:11.38 kirjoittanut teele »

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: bash-ongelma
« Vastaus #1 : 09.12.12 - klo:21.07 »
Jos nyt alkuun yrittäisit päättää, etsitkö ohjelmaa ”muunnos”, ”muunnos01” vai ”muunno01”! ;D

Sitten muista panna ./ eteen.

Ja vielä, tarkista, että muunnos01 sisältää #!-rivin.
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

teele

  • Käyttäjä
  • Viestejä: 851
    • Profiili
Vs: bash-ongelma
« Vastaus #2 : 09.12.12 - klo:21.17 »
Kiitos vastauksesta, kokeilin vielä kerran ja kopioin sen tuloksen säikeen alkuviestiin.

Yrittäisin siis käynnistää konekielisen eli käännetyn ohjelman muunnos01 komennolla ./muunnos01, mutta joku näyttää menevän pieleen, enkä keksi mikä. Se ehkä selviää listauksesta, mutta omia virheitä on todella vaikea löytää.

teele

matsukan

  • Käyttäjä
  • Viestejä: 2152
    • Profiili
Vs: bash-ongelma
« Vastaus #3 : 09.12.12 - klo:21.28 »
onko tuo muunnos ajettava tiedosto eli onko x-liput päällä?

Koodia: [Valitse]
chmod +x muunno01
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

teele

  • Käyttäjä
  • Viestejä: 851
    • Profiili
Vs: bash-ongelma
« Vastaus #4 : 09.12.12 - klo:21.39 »
Tarkistin sen oikeuden vielä kerran, mutta ei suostu käynnistymään

Koodia: [Valitse]
mini@acer:~$ cd markkinointi
mini@acer:~/markkinointi$ ls
ainestietokansio  kohdeXXX    ktau06.cpp~    ohjeita01.tks~
k40.ods           ktau06      muunnos01      oo-temp.csv
k41.ods           ktau06.cpp  ohjeita01.tks  oo-temp.csv~
mini@acer:~/markkinointi$ chmod +x muunnos01
mini@acer:~/markkinointi$ ./muunnos01
bash: ./muunnos01: Tiedostoa tai hakemistoa ei ole
mini@acer:~/markkinointi$


kuutio

  • Vieras
Vs: bash-ongelma
« Vastaus #5 : 09.12.12 - klo:21.59 »
Tarkistin sen oikeuden vielä kerran, mutta ei suostu käynnistymään

Koodia: [Valitse]
bash: ./muunnos01: Tiedostoa tai hakemistoa ei ole
Onko sulla jokin näkymätön merkki (kuten välilyönti) tuon tiedostonimen perässä?

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: bash-ongelma
« Vastaus #6 : 09.12.12 - klo:22.06 »
Yrittäisin siis käynnistää konekielisen eli käännetyn ohjelman muunnos01 komennolla ./muunnos01, mutta joku näyttää menevän pieleen, enkä keksi mikä. Se ehkä selviää listauksesta, mutta omia virheitä on todella vaikea löytää.

Ahaa, tiedosto ei ole siis skripti vaan binaari. Silloin syy voi olla aika inhottava: jos kaikkia ohjelman tarvitsemia dynaamisesti ladattavia kirjastoja ei löydy, komentotulkki antaa tuon samaisen ilmoituksen. Itse ”muunnos01” siis löytyy mutta jotain sen tarvitsemaa osaa ei löydy.

Kokeile mitä kirjastoja tiedosto tarvitsee komennolla:

Koodia: [Valitse]
ldd muunnos01
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

matsukan

  • Käyttäjä
  • Viestejä: 2152
    • Profiili
Vs: bash-ongelma
« Vastaus #7 : 09.12.12 - klo:22.14 »
kirjoita

Koodia: [Valitse]
ls -la
Pohjois-pohjanmaa
-- motto:  backupin tarve huomataan aina liian myöhään

teele

  • Käyttäjä
  • Viestejä: 851
    • Profiili
Vs: bash-ongelma
« Vastaus #8 : 09.12.12 - klo:22.28 »
Ohjelman ei mielestäni pitäisi tarvita mitään kirjastoja. Se on vain pieni muunnosohjelma lukuarvoille.

Oikeuksissa näyttäisi olevan 3 x:ää muunnos01:ssä. Muutama w puuttuu, mutta sen ei kai pitäisi haitata?

Koodia: [Valitse]
mini@acer:~/markkinointi$ ldd muunnos01
käynnistettävää tiedostoa ei voi ladata dynaamisesti
mini@acer:~/markkinointi$ ls -la
yhteensä 576
drwxrwxr-x  4 mini mini   4096 joulu  9 21:00 .
drwxr-xr-x 51 mini mini   4096 joulu  9 21:42 ..
drwxrwxr-x  2 mini mini   4096 joulu  8 15:44 ainestietokansio
-rw-rw-r--  1 mini mini 157609 joulu  8 15:48 k40.ods
-rw-rw-r--  1 mini mini 157728 joulu  9 19:47 k41.ods
drwxrwxr-x  2 mini mini   4096 joulu  8 15:44 kohdeXXX
-rwxrwxr-x  1 mini mini 165230 joulu  9 17:37 ktau06
-rwxrwxr-x  1 mini mini  24988 joulu  9 17:38 ktau06.cpp
-rw-rw-r--  1 mini mini  24956 joulu  9 17:37 ktau06.cpp~
-rwxr-xr-x  1 mini mini  12098 tammi 27  2012 muunnos01
-rw-rw-r--  1 mini mini   1733 joulu  8 11:03 ohjeita01.tks
-rw-rw-r--  1 mini mini   1733 joulu  8 10:53 ohjeita01.tks~
-rw-rw-r--  1 mini mini   3011 joulu  9 20:35 oo-temp.csv
-rw-rw-r--  1 mini mini   3011 joulu  9 17:35 oo-temp.csv~
mini@acer:~/markkinointi$

« Viimeksi muokattu: 09.12.12 - klo:22.41 kirjoittanut teele »

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: bash-ongelma
« Vastaus #9 : 09.12.12 - klo:22.51 »
Ohjelman ei mielestäni pitäisi tarvita mitään kirjastoja. Se on vain pieni muunnosohjelma lukuarvoille.

Ei valitettavasti todista mitään. Nykyiset kääntäjät tuppaavat joko tekemään valtavan isoja binaareja tai käyttämään dynaamisia kirjastoja. ”muunnos01” näyttää olevan 12 kt kokoinen, joten se voi hyvin olla koostettu niin, että tarvittavat komponentit eivät ole mukana.

Muoks: Tässä vielä esimerkki. Pieni keskiarvon laskeva ohjelma:

Koodia: [Valitse]
/* Keskiarvon laskenta, c */

#include <stdio.h>

int main(void)
{
    double luku = 1.0, summa = 0.0, keskiarvo;
    int lkm = 0;

    for (; luku; summa += luku, lkm ++) {
        printf("Anna luku, 0 lopettaa: ");
        scanf("%lf", &luku);
    }
    keskiarvo = summa / -- lkm;
    printf("Keskiarvo = %lf\n", keskiarvo);
    return(0);
}

Ja tässä ldd:n tuloste sen käännetystä versiosta:

Koodia: [Valitse]
tn@bahtin [Tommi/Ohjelmointi/Keskiarvot]$ ldd keskiarvo
        linux-vdso.so.1 =>  (0x00007fffe7848000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f17ff615000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f17ff9f7000)
« Viimeksi muokattu: 09.12.12 - klo:22.53 kirjoittanut SuperOscar »
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

ajaaskel

  • Palvelimen ylläpitäjä
  • Käyttäjä
  • Viestejä: 3401
    • Profiili
Vs: bash-ongelma
« Vastaus #10 : 10.12.12 - klo:09.02 »
"cannot dynamically load executable"

Tuossa nyt herää aika monta kysymystä (ja otsikkokin lienee väärä), onko tuo jokin itse tehty ohjelma jonka olet kääntänyt koneellasi vai ihan muualta koneellesi kannettu ohjelma ?   Ensimmäisessä tapauksessa varmaan jokin käännösvirhe, toisessa tapauksessa tuo ei ole binääriyhteensopiva...
Mitä kertovat:

Koodia: [Valitse]
uname -m
Koodia: [Valitse]
file muunnos01
Autamme ilolla ja ilmaiseksi omalla ajallamme.  Ethän vaadi, uhoa tai isottele näin saamasi palvelun johdosta.

teele

  • Käyttäjä
  • Viestejä: 851
    • Profiili
Vs: bash-ongelma
« Vastaus #11 : 10.12.12 - klo:09.21 »
Tosiaan, ehkä käännöksellä on jotain tekemistä ongelman kanssa. Koska nykyinen käyttisversio u12.04, olen varmaan kääntänyt ohjelman u10.04 -versiolla, joka oli muistaakseni 32-bittinen.

Luulin, että 64 osaa ajaa 32-ohjelmia suoraan. Ohjelma näyttäisi toimivan, kun sen kääntää uudestaan. Mutta en ole vielä siirtänyt käännettyä versiota samaan kokeiluhakemistoon. Yksi ajatus oli, että alkuperäisen ongelmaohjelman kopioinnissa olisi tapahtunut jokin virhe tai oikeudet olisivat jotenkin muuttuneet.

Jos joku osaa sanoa esim. alla olevan listauksen perusteella, että vika on vanhassa käännöksessä, voisin varmaan laittaa aiheen ratkaistuksi.


Koodia: [Valitse]
mini@acer:~$ uname -m
x86_64
mini@acer:~$ cd markkinointi
mini@acer:~/markkinointi$ file muunnos01
muunnos01: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0x1d91c93bee138d8092061cb7d44daf369d351d14, not stripped
mini@acer:~/markkinointi$

SuperOscar

  • Käyttäjä
  • Viestejä: 4060
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: bash-ongelma
« Vastaus #12 : 10.12.12 - klo:10.00 »
Luulin, että 64 osaa ajaa 32-ohjelmia suoraan.

Ainoastaan, jos 32-bittiset kirjastot on asennettu, koska kuten sanoin, noinkin pieni ohjelma KÄYTTÄÄ kirjastoja ;)
pöytäkone 1, NUC: openSUSE Leap 15.6, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11