2010-02-24 47 views
37

Khi tôi nm trên một trong libs của tôi:nm: "U" Biểu tượng là undefined

nm libmylib.so

tôi nhận được một dòng như sau

   U [email protected]@GLIBCXX_3.4 

Tôi đã kiểm tra người đàn ông trang cho nm và tôi nhận được "U" Biểu tượng là không xác định. Biểu tượng không xác định thực sự có ý nghĩa gì?

Nếu nó thực sự không xác định, thì tại sao nm lại báo cáo nó?

+7

như một sang một bên, nm --demangle là khá hữu ích cho C++ nó làm cho những biểu tượng thân thiện hơn –

Trả lời

33

Biểu tượng không xác định là biểu tượng mà thư viện sử dụng nhưng không được xác định trong bất kỳ tệp đối tượng nào đã tạo thư viện.

Thông thường biểu tượng được xác định trong thư viện khác cũng cần được liên kết trong ứng dụng của bạn. Hoặc biểu tượng là không xác định bởi vì bạn đã quên xây dựng mã xác định biểu tượng hoặc bạn đã quên bao gồm tệp đối tượng có biểu tượng đó vào thư viện của bạn.

Trong trường hợp của bạn, nó trông giống như một biểu tượng từ thư viện C của triển khai của bạn, do đó bạn mong muốn không được xác định trong thư viện của riêng bạn. Nó sẽ được định nghĩa trong libc.so của bạn ở bất cứ đâu, có thể là/usr/lib.

+0

Trông giống như một biểu tượng từ libstdC++, trên thực tế, nhưng có, bạn sẽ hy vọng rằng sẽ được cung cấp cho bạn. – ephemient

+0

@ephemient: Woops, tôi đã bỏ lỡ XX ở cuối :) Cảm ơn. – Troubadour

0

Điều đó có nghĩa là thư viện tham chiếu biểu tượng đó (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage trong trường hợp này?) Nhưng không xác định được; một số phần của chương trình bạn liên kết nó với, hoặc một số thư viện khác là nghĩa vụ phải làm điều đó. Nếu bạn định định nghĩa nó trong thư viện của mình, điều đó có nghĩa là bạn không liên kết tệp đối tượng với định nghĩa của biểu tượng đó với phần còn lại của mã thư viện.

-1

Tôi nghĩ điều đó có nghĩa là chính xác: không xác định trong đối tượng này. Một số biểu tượng được đánh giá vào thời gian chạy; đây có thể là một trong số họ.

0

giải mã này có thể được thực hiện như thế này:

  U [email protected]@GLIBCXX_3.4 

Phương tiện:

U->>> in your library its undefined 

gì là undefined?

 _ZNSs4_Rep20_S_empty_rep_storageE 

Nơi có khả năng tìm thấy?

 GLIBCXX_3.4 
Các vấn đề liên quan