2013-02-23 14 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); 
} 

Jestem nowicjuszem w dziedzinie testowania jednostek cmocka, http://www.ohloh.net/p/cmocka. Kiedy skompilowany powyższy program jako gcc program.c -lcmocka i kiedy prowadził ./a.out mam błąd:Błąd podczas ładowania bibliotek współużytkowanych: libcmocka.so.0: Brak takiego pliku lub katalogu

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

Próbowałem, ale nie można naprawić. Jaki jest dokładnie problem?

+1

Twój program ładujący nie może znaleźć tej udostępnionej biblioteki. Czy zainstalowałeś go gdzieś "dziwacznie"? –

Odpowiedz

0

Ten błąd oznacza, że ​​program ładujący programu nie może znaleźć pliku biblioteki współużytkowanej cmocka. Musisz dodać katalog, w którym znajduje się biblioteka współdzielona (np. Libmocka.so.x) do pliku "/etc/ld.so.conf". Włączenie go do zmiennej LD_LIBRARY_PATH również zadziała.

Właściwie lepiej jest zainstalować biblioteki (udostępnione i statyczne) w "standardowych" folderach, takich jak/usr/lib lub/usr/local/lib, chyba że masz jakiś szczególny powód, aby tego nie robić.

+0

Oto dane wyjściowe instalacji, które zrobiłem. 'abhishek @ abhishek-ubuntu: ~/Pictures $ sudo make install - NIE MOŻNA znaleźć Doxygen (brak: DOXYGEN_EXECUTABLE) - Konfigurowanie zrobione - Generowanie wykonanych plików zostało napisane na:/home/abhishek/Zdjęcia [100%] Zbudowany cel cmocka_shared Zainstaluj projekt ... - Zainstaluj konfigurację: "" - Aktualne: /usr/local/include/cmocka.h - Do góry -data: /usr/local/lib/libcmocka.so.0.0.1 - Aktualne: /usr/local/lib/libcmocka.so.0 - Aktualne:/usr/local/lib/libcmocka.so' –

+0

Czy/usr/local/lib w /etc/ld.so.conf? Niektóre googlowanie mówi mi, że dystrybucje Fedory tego nie dodają. Dlaczego nie wiem! Ponieważ jest to bardzo popularna lokalizacja instalacji dla bibliotek. –

+0

Najpierw sprawdź, czy/usr/local/lib znajduje się w LD_LIBRARY_PATH i spróbuj tymczasowo dodać je, używając "export LD_LIBRARY_PATH =/usr/local/lib: $ {LD_LIBRARY_PATH}" przed edycją /etc/ld.so.conf. Zwróć też uwagę, że niektóre dystrybucje zawierają katalog /etc/ld.so.conf.d z plikami .conf. Jeśli tak, musisz dodać/usr/local/lib do nowego pliku .conf (np. Local.conf) wewnątrz tego katalogu. Po wprowadzeniu jakichkolwiek zmian (do /etc/ld.so.conf lub /etc/ld.so.conf.d), musisz uruchomić polecenie "ldconfig". –

1

można sprawdzić, czy masz uprawnienia dostępu do folderu/usr/local/lib/

zrobic ls -lart /usr/local/lib/libcmocka.so i sprawdzić, czy uprawnienia dostępu i sprawdzić, czy przeczytałeś pozwolenie

0

używam cmake w moim projekcie, więc tak, jak rozwiązać ten był w użyciu następujących poleceń cUpewnij:

# 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) 

lub wiersza polecenia:

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

W ostatnim przypadku można użyć opcji -L, aby poinformować gcc, gdzie szukać plików biblioteki. W takim przypadku, jeśli zainstalowałeś go gdzieś niekonwencjonalnym, gcc może go znaleźć, jeśli określisz, gdzie znajdują się pliki biblioteki.

Powiązane problemy