2013-02-23 13 views
5
#include <stdarg.h> 
#include <stddef.h> 
#include <setjmp.h> 
#include <cmocka.h> 
/* A test case that does nothing and succeeds. */ 
static void null_test_success(void **state) { 
    (void) state; /* unused */ 
} 
int main(void) { 
    const UnitTest tests[] = { 
     unit_test(null_test_success), 
    }; 
    return run_tests(tests); 
} 

Sono nuovo al framework di test unità cmocka, http://www.ohloh.net/p/cmocka. Quando ho compilato il programma di cui sopra come gcc program.c -lcmocka e quando mi sono imbattuto ./a.out ho ottenuto l'errore:Errore durante il caricamento delle librerie condivise: libcmocka.so.0: nessun file o directory

./a.out:error while loading shared libraries: libcmocka.so.0: cannot open shared object file: No such file or directory

ho provato, ma non riesco a risolvere il problema. Qual è esattamente il problema qui?

+1

Il programma di caricamento del programma non riesce a trovare quella libreria condivisa. L'hai installato da qualche parte "strano"? –

risposta

0

Questo errore indica che il programma di caricamento non riesce a trovare il file della libreria condivisa di cmocka. È necessario aggiungere la directory in cui la libreria condivisa (ad esempio libmocka.so.x) è presente nel file "/etc/ld.so.conf". Anche l'inclusione nella variabile LD_LIBRARY_PATH funzionerà.

In realtà è meglio installare le librerie (condivise e statiche) in cartelle "standard" come/usr/lib o/usr/local/lib a meno che non si abbia una ragione specifica per non farlo.

+0

Ecco l'output per l'installazione che ho fatto. 'abhishek @ abhishek-ubuntu: ~/Pictures $ sudo make install - Impossibile trovare Doxygen (mancante: DOXYGEN_EXECUTABLE) - Configurazione completata - Creazione completata - I file di costruzione sono stati scritti in:/home/abhishek/Immagini [100%] Creato target cmocka_shared Installa il progetto ... - Installa configurazione: "" - Aggiornato: /usr/local/include/cmocka.h - Fino a -data: /usr/local/lib/libcmocka.so.0.0.1 - Up-to-date: /usr/local/lib/libcmocka.so.0 - Aggiornato:/usr/local/lib/libcmocka.so' –

+0

È/usr/local/lib in /etc/ld.so.conf? Alcuni googling mi dicono che le distribuzioni di Fedora non aggiungono questo. Perchè non lo so! Dal momento che è un percorso di installazione molto comune per libs. –

+0

Prima verifica se/usr/local/lib è in LD_LIBRARY_PATH e prova ad aggiungerlo temporaneamente usando "export LD_LIBRARY_PATH =/usr/local/lib: $ {LD_LIBRARY_PATH}" prima di modificare /etc/ld.so.conf. Inoltre, tieni presente che alcune distro hanno una directory /etc/ld.so.conf.d con i file .conf al suo interno. Se è così, è necessario aggiungere/usr/local/lib a un nuovo file .conf (ad esempio local.conf) all'interno di questa directory. Dopo aver apportato le modifiche (a /etc/ld.so.conf o /etc/ld.so.conf.d), è necessario eseguire il comando "ldconfig". –

1

si può verificare se si ha il permesso di accedere alla cartella/usr/local/lib/

Fare un ls -lart /usr/local/lib/libcmocka.so e verificare l'autorizzazione di accesso e verificare se avete letto il permesso

0

io uso cmake nel mio progetto, in modo che il modo in cui ho risolto questo è stato quello di utilizzare i seguenti comandi: cmake

# Find and add the cmocka library 
find_library(CMOCKA_LIBRARY NAMES cmocka) 
add_library(cmocka SHARED IMPORTED) 
set_property(TARGET cmocka PROPERTY IMPORTED_LOCATION "${CMOCKA_LIBRARY}") 

# Create and link the testing file to cmocka 
add_executable(mytest my_example_test.c) 
target_link_libraries(mytest cmocka) 

# Add this as a test for ctest 
add_test(TEST_MY_EXAMPLE mytest) 

O con la riga di comando:

gcc my_example_test.c -L/usr/local/lib -lcmocka -o mytest && ./mytest 

Nell'ultimo caso, è possibile utilizzare l'opzione -L per indicare a gcc dove cercare i file di libreria. In questo caso, se è stato installato in un luogo non convenzionale, gcc può ancora trovarlo se si specifica dove si trovano i file della libreria

Problemi correlati