2011-11-30 46 views
5

Tôi đang sử dụng đoạn mã sau để kiểm tra thư viện RE2 google củare2 tải thư viện

int main() 
{ 
    int r = RE2::FullMatch("hello", "h.*o"); 
    cout <<" match = " << r << endl; 
    return 0; 
} 

Tôi compling bằng cách sử dụng lệnh sau -

g++ -lre2 -o retest retest.cc 

Nó được biên soạn tốt, nhưng khi tôi đang cố gắng để chạy thử lại với ./retest việc ném lỗi sau -

error while loading shared libraries: libre2.so.0: cannot open shared object file: No such file or directory 

Tôi đã kiểm tra và libre2.so.0 thư viện nào tồn tại ở thư mục người dùng/local/lib và thư mục re2/obj/so. Vậy tại sao lỗi này lại đến khi tôi quên một số chi tiết cần thêm?

+1

Đây có phải là giải pháp không? http://edn.embarcadero.com/article/32861. Chỉ cần thiết lập LD_LIBRARY_PATH của bạn để trỏ đến thư mục lib nơi libre.so.0 được đặt. – Lucian

+1

tệp libre2.so.0 nằm ở đâu? là nó trong 'LD_LIBRARY_PATH' của bạn và/hoặc một đường dẫn từ /etc/ld.so.conf? bạn đã chạy ldconfig sau khi cài đặt nó chưa? – PlasmaHH

+1

Có thể trùng lặp với [lỗi Linux khi tải thư viện được chia sẻ: không thể mở tệp đối tượng được chia sẻ: Không có tệp hoặc thư mục nào] [http://stackoverflow.com/questions/480764/linux-error-while-loading-shared-libraries-cannot -open-shared-object-file-no-s) –

Trả lời

4

Chạy sudo ldconfig đã thực hiện thủ thuật.

1

pitfall Classic:

g++ -o retest retest.cc -lre2 

Các thư viện cần phải xuống hàng chót

Sửa phải trung thực Tôi ngạc nhiên khi thấy sự vắng mặt của các lỗi liên kết. Tôi sẽ giữ nó xung quanh trong trường hợp bạn bỏ lỡ một số thông tin trong câu hỏi

+2

Có lẽ đã đến lúc đảm bảo thư viện nằm trong đường dẫn của ld và chạy lại ldconfig. –

+0

@ MichaelKrelin-hacker: +1 có thể. Mặc dù trên hầu hết các hệ thống 'usr/local/lib' nằm trong ldconfig và libre2 được đóng gói – sehe

+0

Tôi nghĩ có, bỏ qua kiểm tra đường dẫn rất có thể an toàn và trong trường hợp thư viện được cài đặt từ nguồn' ldconfig' có thể giúp đỡ. –

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