2012-08-14 39 views
5

Trong khi liên kết động, một tham chiếu hàm không xác định lạ được xuất hiện. Tôi biết tên của thư viện cần chứa hàm này. Có bất kỳ lệnh linux nào để đảm bảo hàm đã tồn tại trong thư viện (tệp .a) không?Kiểm tra sự tồn tại của một hàm trong thư viện trong linux

+2

Hãy thử 'nm ', nếu biểu tượng của bạn có tiền tố là 't' hoặc' T', lib có nó. – Rohan

+0

[autoconf] (http://www.gnu.org/software/autoconf/) thực hiện điều này khi kiểm tra tính khả dụng của thư viện với ['AC_CHECK_LIB'] (http://www.gnu.org/software/autoconf/manual /autoconf.html#Libraries). –

Trả lời

9

Bạn sẽ có thể sử dụng nm (có thể yêu cầu các tham số --demangle) để có được một danh sách tất cả những gì là bên trong thư viện , sau đó sử dụng grep để lọc kết quả, ví dụ: tìm kiếm \d T functionname\( hoặc một cái gì đó tương tự.

+0

Thư viện có tên hàm được đặt trước bằng T. Nhưng tên hàm không chính xác như những gì tôi mong đợi. nm tìm thấy: '0000000000000310 T _Z15lmp_init_deviceiiiiidii' trong khi tôi đang tìm kiếm lmp_init_device. Có phải tiền tố/hậu tố bị bỏ qua trong khi liên kết không? – ahmad

+1

Thêm '--demangle' và nó sẽ loại bỏ các ký tự được thêm vào (do nó là C++ chứ không phải là chữ C). – Mario

1

Có một cái nhìn để nm lệnh mà nên cung cấp cho bạn những mẩu thông tin bạn đang tìm kiếm

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