You need to join this project to post message / question. See Help for details.

GNU development Tools - nm

- What is "nm" for ? - list symbols from object files.
Added by bronzeboyvn almost 2 years ago  »  Votes: 1/1

Hiện nay lập trình multi-threading trên Linux, người ta thường sử dụng chuẩn POSIX. Khi đọc các trang man của POSIX functions, ta được khuyên rằng phải biên dịch code với tham số "-lpthread" hoặc "-lrt". Tôi viết thử một chương trình đơn giản khi chạy process gồm có 2 threads. Và code được biên dịch tham số "-lpthread" hoặc "-lrt" đều ổn.
Vậy có gì khác biệt giữa libpthreadlibrt ?
Câu lệnh mn được dùng ở đây để xem xét sự khác biệt của 2 object files libpthread.alibrt.a. Ít nhất là ta cần xem 2 thư viện này cung cấp các API có hòan toàn giống nhau không.

nm -g /usr/lib/libpthread.a
nm -g /usr/lib/librt.a

So sánh 2 kết quả từ 2 câu lệnh ta thấy: libthread không hỗ trợ asynchronous I/O functions, trong khi librt thì có; ngược lại librt không hỗ trợ POSIX semaphore, trong khi libthread thì có. Nhận thấy điểm khác biệt này, nó phần nào giúp tôi thóat khỏi sự bối rồi khi phải phân biệt libpthreadlibrt.
Hai thư viện này có rất nhiều API mà tôi chưa bao giờ đụng đến, nên chắc rằng còn nhiều điểm khác biệt giữa chúng. Rất hy vọng được các bạn chỉ bảo thêm về vấn đề này!


Comments

Added by z almost 2 years ago

nm là công cụ để liệt kê các symbol trong thư viện (hay object file)

Added by tuanndh almost 2 years ago

Ạc! Một cái là 1003.1c còn một cái 1003.1b thì bối rối cái gì nhỉ ?

Added by bronzeboyvn almost 2 years ago

Nếu thông suốt hết thì chẳng phải bối rối rồi.