Làm thế nào để kiểm tra nếu một thư viện được cài đặt?


167

Trong linux, làm cách nào để kiểm tra xem thư viện đã được cài đặt hay chưa? (từ dòng lệnh của khóa học).

Trong trường hợp cụ thể của tôi bây giờ, tôi muốn kiểm tra xem libjpeg đã được cài đặt chưa.


Bạn đang sử dụng bản phân phối nào?
bán kính

Câu trả lời:


211

Để thực hiện việc này theo cách phân tán * độc lập, bạn có thể sử dụng ldconfig với grep, như thế này:

ldconfig -p | grep libjpeg

Nếu libjpeg không được cài đặt, sẽ không có đầu ra. Nếu nó được cài đặt, bạn sẽ nhận được một dòng cho mỗi phiên bản có sẵn.

Thay thế libjpeg bằng bất kỳ thư viện nào bạn muốn và bạn có cách kiểm tra chung * độc lập với phân phối * về tính khả dụng của thư viện.

Nếu vì một lý do nào đó, đường dẫn đến ldconfig không được đặt, thông thường bạn có thể thử gọi nó bằng đường dẫn đầy đủ của nó /sbin/ldconfig.

** 99% số lần *


2
Điều này nên được chấp nhận là câu trả lời. Tuyệt quá!

1
Không thể sử dụng điều này để kiểm tra phiên bản dev (tiêu đề) của thư viện, phải không?
andig

2
Bạn có thể chỉ định 99% lần ? bash: ldconfig: command not foundtrên Debian x64 Jessie với xfce! Đây là bản phát hành debian được giới thiệu trên trang web của debian ...
Tomáš Zato

4
@ TomášZato: ldconfigkhông khả dụng ( command not foundhiển thị) nếu bạn cố chạy nó mà không phải là siêu người dùng.
Gauthier

2
/sbin/ldconfig -plàm việc cho tôi mà không cần phải root.
Pedro Gimeno

34

Bạn có thể kiểm tra với người quản lý gói phân phối của mình (aptitude, yum, ...) nhưng vì bạn không cung cấp cho bản phân phối của mình nên tôi không thể đưa ra lệnh đúng.

Một cách khác có thể là chạy gcc -ljpeg, nếu bạn nhận được 'ld: thư viện không tìm thấy cho -ljpeg', điều đó có nghĩa là gcc không tìm thấy thư viện (nhưng điều đó không có nghĩa là nó chưa được cài đặt), nếu bạn nhận được một cái gì đó như 'Biểu tượng không xác định : "_Main", được tham chiếu từ: ... 'có nghĩa là libjpeg đã được tìm thấy.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* là một số cách khác để tìm nếu lib được cài đặt trong hệ thống

Có nhiều cách khác để kiểm tra xem, nếu bạn cung cấp cho chúng tôi nhiều ngữ cảnh hơn (tại sao bạn cần kiểm tra xem libjpeg đã được cài đặt chưa), chúng tôi có thể cung cấp cho bạn giải pháp tốt nhất cho trường hợp cụ thể của bạn.


Làm thế nào để tìm thấy nó bằng cách sử dụng năng khiếu?
BBK

17

Tôi sử dụng tiện ích whereis .

Mẫu vật:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la

11

Tôi sử dụng cái này:

gcc -lpng

Khi lib được cài đặt, nó mang lại:

undefined reference to 'main'

Khi lib không được cài đặt:

cannot find -lpng

9

Đối với phân phối dựa trên deb bạn có thể làm

dpkg -s packagename

Hoặc nếu bạn chỉ biết tên tệp, hãy sử dụng

locate filename

Tên tệp thường là libs Something.so [.version].


1
Tên tệp cũng có thể là một cái gì đó như "libs Something.a" cho phiên bản tĩnh.
bán kính

Tôi thấy dpkg -shạn chế về tiện ích, vì nó muốn tên gói thực tế, có thể khác biệt một cách tinh tế hoặc đáng kể so với chính thư viện. Tôi sử dụngdpkg -s|grep LIBRARY
Drew Stephens

2
@dinomite apt-file là bạn của bạn :)
bán kính

4

Trên các hệ thống dựa trên Redhat, người ta có thể sử dụng pkg-config để xác minh xem thư viện có được cài đặt hay không. Nhiều nhị phân vòng / phút thực sự thực hiện các kiểm tra tương tự trước khi tiến hành cài đặt, vì vậy chúng tôi có thể dựa vào tính xác thực của nó một cách hợp lý.

pkg-config --cflags jpeg

pkg-config --libs jpeg

pkg-config --cflags "jpeg >= 1.0.0" # for version check
pkg-config  --modversion jpeg | awk -F. '{ printf "0x%02X%02X%02X\n",$1,$2,$3 }' #version check


1

Bạn cũng có thể thử sử dụng dpkg để kiểm tra xem nó đã được cài đặt chưa.

dpkg --list | grep [some_key_words_of_your_lib]

Bên cạnh đó, trên CentOS, bạn có thể thử điều này.

rpm -qa [lib_name]


Lưu ý: Sẽ chỉ hoạt động đối với các bản phát hành dựa trên Debian
ALex_hha

@ALex_hha Vâng, cảm ơn bạn, điều này cần được nhấn mạnh. Trên các hệ thống dựa trên CentOS hoặc mũ đỏ, sử dụng pkg-configthay thế.
Scott Yang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.