Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 24
  1. #1

    [c++]help Modifica Sorgenti

    Ciao a tutti!
    Vi descrivo brevemente il mio problema.
    Ho un dispositivo(mediaplayer) con busybox (linux) e voglio installarci sopra il programma dctcs (http://yodctcs.googlepages.com/).
    Una volta compilati i sorgenti sul pc,e messo i file sulla busybox,quando lancio il programma mi dice che non riesce a caricare delle librerie. Le librerie sono in una directory diversa dalla usuale /lib o usr/lib dove cerca il prog,e non posso metterle li perche il file system di root è read-only.
    -Come faccio ora in fase di compilazione a linkare staticamente al binario le due librerie di cui ha bisogno?
    -Oppure posso indicare in fase di compilazione al binario un percorso diverso dove cercare le librerie?
    -Se devo modificare il makefile,in che modo?

    Scusate se sono stato lungo,spero di essermi fato capire!
    P.S:sulla busybox non ci sono molto comandi,gia provato LD_LIB_PATH e tutte gli altri possibili(e impossibili!!!!),quindi le uniche soluzione sono quelle elencate sopra!

    Grazie mille

  2. #2
    se non hai i privilegi di root prova a settare la variabile ambiente LD_LIBRARY_PATH

    codice:
    $export LD_LIBRARY_PATH=directory_dove_sono_le_librerie
    ciao
    sergio

  3. #3
    Originariamente inviato da mondobimbi
    se non hai i privilegi di root prova a settare la variabile ambiente LD_LIBRARY_PATH

    codice:
    $export LD_LIBRARY_PATH=directory_dove_sono_le_librerie
    ciao
    sergio
    Sergio sei un grande!
    Il problema del caricamento delle librerie è risolto,ma ne ho un'altro.
    Quando lancio il programma mi dice che non trova il file di configurazione "/etc/dctcs.conf" che infatti non è in /etc,perchè non ci posso scrivere in /etc.
    Posso settare qualche altra variabile di ambiente per questo?
    Ti prego aiutami anche con questo che poi ho finalmente risolto!!

    Grazie mille.

  4. #4
    la prima fase per la compilazione di un programma da sorgenti è lanciare lo script configure. Normalmente esiste una opzione che si chiama --prefix che definisce la directory dove vuoi che venga installato il programma. Esiste anche un'altra opzione --help che ti elenca le opzioni di configurazione (leggiti anche i file INSTALL e README se ci sono).

    Prova a compilarlo così
    $./configure --prefix=$(HOME)
    e poi
    $make
    $make install
    $make clean

    dovresti trovarti nella tua home una directory che normalmente ha lo stesso nome del programma che vuoi installare, in questa directory troverai delle sottodirectory nominate etc bin lib etc.
    Il file di configurazione che cerchi dovrebbe andare a finire in etc .
    ciao
    sergio

  5. #5
    Originariamente inviato da mondobimbi
    la prima fase per la compilazione di un programma da sorgenti è lanciare lo script configure. Normalmente esiste una opzione che si chiama --prefix che definisce la directory dove vuoi che venga installato il programma. Esiste anche un'altra opzione --help che ti elenca le opzioni di configurazione (leggiti anche i file INSTALL e README se ci sono).

    Prova a compilarlo così
    $./configure --prefix=$(HOME)
    e poi
    $make
    $make install
    $make clean

    dovresti trovarti nella tua home una directory che normalmente ha lo stesso nome del programma che vuoi installare, in questa directory troverai delle sottodirectory nominate etc bin lib etc.
    Il file di configurazione che cerchi dovrebbe andare a finire in etc .
    ciao
    sergio
    Sergio grazie per la risposta,ma io chiedevo un'altra cosa!
    Il mio dispositivo è un mediaplayer con una busybox, quindi sistema operativo linux si,ma molto limitato.
    Io posseggo il binario (dctcs) con file di configurazione (dctcs.conf) di un programma già compilato apposta per il mio sistema( da cui non posso compilare).
    Ora il problema è che il file system di root è read-only,quindi non posso creare niente(cartelle,file,etc)in root (cioè in /etc:/usr:/lib).Quindi ho passato i files del programma in una parte del sistema read & write ( /var).
    Prima quando lanciavo il programma mi chiedeva le librerie, che non trovava in /lib (non ci posso copiare niente lì) e con la tua dritta ho risolto dicendo al programma di cercarle in /var/lib dove le ho copiate.

    ORA quando lancio il programma mi chiede il file di configurazione /etc/dctcs.conf che io ho messo in /var/etc perchè non posso copiare niente in /etc!
    La mia domanda è:
    posso dire al programma di cercare il suo file di configurazione in un nuova path con il settaggio di qualche variabile di ambiente come fatto con le librerie?
    C'è un altro modo senza dover ricompilare?

    Grazie mille,ti prego di rispondermi e di scusarmi per la lungaggine.

  6. #6

    se non puoi ricompilare non hai molte possibilità perchè questa impostazione è interna al programma.
    Alcuni programma, mysql è uno di questi, prima di leggere il file di configurazione nella directory di installazione leggono $(HOME) per verificare se lì è presente un file di configurazione personalizzato.
    Altri programmi, per esempio il server http apache, permettono di inserire come opzioni del programma la posizione del file di configurazione, se differente da quella impostata.
    Prova a leggere la documentazione del software per verificare se esiste questa possibilità.
    ciao
    sergio

  7. #7
    Originariamente inviato da mondobimbi

    se non puoi ricompilare non hai molte possibilità perchè questa impostazione è interna al programma.
    Alcuni programma, mysql è uno di questi, prima di leggere il file di configurazione nella directory di installazione leggono $(HOME) per verificare se lì è presente un file di configurazione personalizzato.
    Altri programmi, per esempio il server http apache, permettono di inserire come opzioni del programma la posizione del file di configurazione, se differente da quella impostata.
    Prova a leggere la documentazione del software per verificare se esiste questa possibilità.
    ciao
    sergio
    Ho letto la documentazione del software ed effettivamente in fase di lancio c'è l'opzione per specificare il config file!
    Però cmq specificando il config file da usare mi da l'errore che non ha trovato /etc/dctcs.conf,però poi PARTE E FUNZIONA! Sai mica perchè dà lo stesso errore o come faccio a non visualizzare l'errore?

    Un 'ultima domanda.....per settare LD_LIBRARY_PATH sempre al valore che voglio stavo pensando di inserire un comando nello script di avvio /etc/profile,faccio bene?E come faccio all'avvio del sistema a non far visualizzare su schermo i nuovi comandi che ho inserito(quello che sta facendo /etc/profile insomma)? :master:

    Grazie mille sergio,mi stai aiutando molto!!!!

  8. #8
    Originariamente inviato da CaptainHook8
    Ho letto la documentazione del software ed effettivamente in fase di lancio c'è l'opzione per specificare il config file!
    Però cmq specificando il config file da usare mi da l'errore che non ha trovato /etc/dctcs.conf,però poi PARTE E FUNZIONA! Sai mica perchè dà lo stesso errore o come faccio a non visualizzare l'errore?
    probabilmente è un errore di programmazione
    Un 'ultima domanda.....per settare LD_LIBRARY_PATH sempre al valore che voglio stavo pensando di inserire un comando nello script di avvio /etc/profile,faccio bene?E come faccio all'avvio del sistema a non far visualizzare su schermo i nuovi comandi che ho inserito(quello che sta facendo /etc/profile insomma)? :master:
    normalmente non è buona pratica inserirlo in /etc/profile , se vuoi inseriscila in .bash_profile, nella tua $(HOME). Oppure fai un wrapper in bash che inizialmente setta la variabile ambiente e poi esegue il programma.
    ciao
    sergio

  9. #9
    Originariamente inviato da mondobimbi
    probabilmente è un errore di programmazione

    normalmente non è buona pratica inserirlo in /etc/profile , se vuoi inseriscila in .bash_profile, nella tua $(HOME). Oppure fai un wrapper in bash che inizialmente setta la variabile ambiente e poi esegue il programma.
    ciao
    sergio
    come faccio a creare un wrapper in bash?
    se il programma è /var/bin/dctcs e le librerie si trovano in var/lib mi puoi fare un esempio?

    Grazie mille.

  10. #10
    prova così
    codice:
    #!/bin/sh
    
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/var/lib
    
    export LD_LIBRARY_PATH
    
    case "$1" in
            start)
                    if [ -x /var/bin/dctcs ]; then
                            /var/bin/dctcs & > /dev/null 2>&1 && echo -n ' dctcs\n'
                    fi
                    ;;
            stop)
                    /usr/bin/killall dctcs > /dev/null 2>&1 && echo -n ' dctcs\n'
                    ;;
            *)
                    echo ""
                    echo "Usage: `basename $0` { start | stop }"
                    echo ""
                    exit 64
                    ;;
    esac
    ciao
    sergio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.