Khi tôi chạy một quy trình liên kết đến thư viện dùng chung trong thời gian chạy (được liên kết khi quá trình bắt đầu, không được liên kết sau đó dlload()
), thì nó tìm .so
tệp thư viện chia sẻ ( ) khác ở LD_LIBRARY_PATH
đâu?
Lý lịch:
Tôi có một số mã C ++ mà tôi đã viết sử dụng thư viện của bên thứ ba cụ thể. Tôi đã cài đặt thư viện và biên dịch mã của mình trên hai nền tảng khác nhau, cả Ubuntu nhưng các phiên bản khác nhau và các phiên bản gcc khác nhau. Thư viện được biên dịch và cài đặt từ nguồn, và được đặt /usr/local/lib
trên cả hai nền tảng. Khi tôi biên dịch mã của mình, tôi liên kết với các pkg-config --libs
tham số cho thư viện bên thứ ba và tôi đã xác minh rằng pkg-config --libs
trả về cùng một thứ chính xác trên cả hai nền tảng.
Mã của tôi biên dịch thành công trên cả hai nền tảng và LD_LIBRARY_PATH
không được xác định (hoặc được xác định là trống ""
:) trên cả hai nền tảng. Tuy nhiên, khi tôi chạy nó trên một platoform, nó hoạt động tốt và mặt khác tôi gặp lỗi này:
error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
Thật thú vị, những cái không hoạt động là phiên bản mới hơn của Ubuntu và gcc. : /
Vì vậy, tôi đang cố gắng tìm ra cách người làm việc có thể định vị thư viện, để tôi có thể làm cho cái bị hỏng định vị thư viện theo cùng một cách. (tức là không cần cài đặt LD_LIBRARY_PATH
)
Cập nhật:
Đây là đầu ra của tôi từ cat /etc/ld.so.conf.d/*
... trên hệ thống làm việc (cũ hơn):
/usr/lib/mesa
/usr/lib32/mesa
/usr/lib/alsa-lib
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
... trên hệ thống bị hỏng (mới hơn):
# libc default configuration
/usr/local/lib
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/mesa
/usr/local/lib/libthrift-0.9.0.so
nhưng nó vẫn báo lỗi error while loading shared libraries: libthrift-0.9.0.so: cannot open shared object file: No such file or directory
... Có lý do nào khiến nó không nhận được thư mục từ đó /etc/ld.so.conf.d/*.conf
không?
sudo ldconfig -v
như đề xuất dưới đây. Nếu nó vẫn không hoạt động, hãy cập nhật câu hỏi của bạn với đầu ra của ldd /path/to/your/application
.
/etc/ld.so.conf.d/*.conf
, nhưng tôi không chắc về nó.