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

Tôi mới vào khung kiểm tra đơn vị cmocka, http://www.ohloh.net/p/cmocka. Khi tôi biên soạn chương trình trên như là chương trình gcc.c -lcmocka và khi tôi chạy ./a.out tôi gặp lỗi:Lỗi khi tải thư viện được chia sẻ: libcmocka.so.0: Không có tệp hoặc thư mục nào như vậy

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

Tôi đã thử nhưng không thể khắc phục được. Vấn đề chính xác ở đây là gì?

+1

Trình tải chương trình của bạn không thể tìm thấy thư viện được chia sẻ đó. Bạn đã cài đặt nó ở đâu đó "lạ"? –

Trả lời

0

Lỗi này có nghĩa là trình tải chương trình không thể tìm thấy tệp thư viện được chia sẻ cmocka. Bạn cần phải thêm thư mục trong đó thư viện được chia sẻ (ví dụ libmocka.so.x) có mặt trong tệp "/etc/ld.so.conf". Bao gồm nó trong biến LD_LIBRARY_PATH cũng sẽ hoạt động.

Thực ra tốt hơn là cài đặt thư viện (chia sẻ và tĩnh) thành thư mục "chuẩn" như/usr/lib hoặc/usr/local/lib trừ khi bạn có lý do cụ thể không làm như vậy.

+0

Đây là đầu ra cho quá trình cài đặt mà tôi đã thực hiện. 'abhishek @ abhishek-ubuntu: ~/Hình ảnh $ sudo make install - KHÔNG thể tìm thấy Doxygen (thiếu: DOXYGEN_EXECUTABLE) - Cấu hình xong - Tạo xong - Xây dựng các tập tin đã được ghi vào:/home/abhishek/Hình ảnh [100%] Mục tiêu được xây dựng cmocka_shared Cài đặt dự án ... - Cài đặt cấu hình: "" - Cập nhật: /usr/local/include/cmocka.h - Cập nhật -date: /usr/local/lib/libcmocka.so.0.0.1 - Cập nhật: /usr/local/lib/libcmocka.so.0 - Cập nhật:/usr/local/lib/libcmocka.so' –

+0

Có phải/usr/local/lib trong /etc/ld.so.conf không? Một số googling nói với tôi rằng Fedora distro không thêm vào đó. Tại sao tôi không biết! Vì nó là một vị trí cài đặt rất phổ biến cho libs. –

+0

Kiểm tra đầu tiên nếu/usr/local/lib nằm trong LD_LIBRARY_PATH và thử tạm thời thêm nó bằng cách sử dụng "xuất LD_LIBRARY_PATH =/usr/local/lib: $ {LD_LIBRARY_PATH}" trước khi chỉnh sửa /etc/ld.so.conf. Ngoài ra, xin lưu ý rằng một số bản phân phối có thư mục /etc/ld.so.conf.d với các tệp .conf bên trong. Nếu bạn cần thêm/usr/local/lib vào một tệp .conf mới (ví dụ: local.conf) bên trong thư mục này. Sau khi thực hiện bất kỳ thay đổi nào (vào /etc/ld.so.conf hoặc /etc/ld.so.conf.d), bạn cần chạy lệnh "ldconfig". –

1

bạn có thể kiểm tra xem bạn có quyền truy cập vào thư mục/usr/local/lib/

Thực hiện ls -lart /usr/local/lib/libcmocka.so và kiểm tra sự cho phép truy cập và kiểm tra xem bạn đã đọc phép

0

tôi sử dụng cmake trong dự án của tôi, vì vậy cách tôi giải quyết này là để sử dụng các lệnh cmake sau:

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

OR với dòng lệnh:

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

Trong trường hợp cuối cùng, bạn có thể sử dụng tùy chọn -L để cho gcc biết nơi tìm tệp thư viện. Trong trường hợp này, nếu bạn đã cài đặt nó ở đâu đó độc đáo, gcc vẫn có thể tìm thấy nếu bạn chỉ định nơi tệp thư viện được đặt

Các vấn đề liên quan