Tôi muốn lập trình danh sách các thư viện được chia sẻ được liên kết bởi nhị phân của tôi trên Linux và Solaris. Ngay bây giờ tôi bao ra để pmap (Tôi không thể sử dụng ldd
trên nhị phân vì nó sẽ không bao gồm các thư viện dlopen'd, và tôi không thể sử dụng pldd
bởi vì nó chỉ là Solaris):Làm thế nào để có được danh sách thư viện chia sẻ thực thi từ C++?
std::ostringstream cmd;
cmd << "/usr/bin/pmap " << getpid() << " | awk '{ print $NF }' | grep '\\.so' | sort -u";
FILE* p = popen(cmd.str().c_str(), "r");
Đây là một chút hackish nhưng nó hoạt động trên cả hai Solaris và Linux (đầu ra pmap là hơi khác nhau nhưng thông tin mong muốn là luôn luôn trong cột cuối cùng). Có cách nào để có được thông tin tương tự mà không bị bắn phá không? Điều đó hoạt động trên cả hai nền tảng? Tôi giả sử các tập tin /proc/$PID
được định dạng khác nhau giữa chúng nhưng tôi không biết nơi các tiêu đề để giúp phân tích cú pháp những người thường nằm (nếu có một vị trí chung ở tất cả?).
Nói đúng cách, các thư viện 'dlopen'ed không được "liên kết", chúng được tải khi chạy. Tôi giả sử bạn thực sự muốn có một danh sách của tất cả các thư viện được chia sẻ tải? –
Đúng vậy. –