2010-02-24 31 views
37

當我nm的在我的庫之一:納米: 「U」 符號未定義

納米libmylib.so

我得到這樣

   U [email protected]@GLIBCXX_3.4 

我查了人行頁面爲nm,我得到了「U」符號是未定義的。未定義的符號究竟意味着什麼?

如果它真的沒有定義,那麼爲什麼nm會報告它?

+7

順便說一句,納米--demangle是對C非常有用++它使符號更友好 –

回答

33

未定義的符號是庫使用的符號,但未在創建庫的任何對象文件中定義。

通常符號是在另一個庫中定義的,它也需要鏈接到您的應用程序中。或者,符號是未定義的,因爲您忘記了構建定義符號的代碼,或者忘記了將帶有該符號的對象文件包含到庫中。

在你的情況下,它看起來像來自你的實現的C庫的一個符號,所以你會期望在你自己的庫中是未定義的。它將在您的libc.so中定義,無論它在哪裏,可能是/ usr/lib。

+0

貌似從一個的libstdC++符號,其實,不過是的,你會想到要爲你提供。 – ephemient

+0

@ephemient:Woops,我錯過了最後的XX :)謝謝。 – Troubadour

0

這意味着庫引用該符號(在這種情況下爲std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Rep::_S_empty_rep_storage?),但它沒有定義它;您鏈接的程序的某些部分或其他庫應該這樣做。如果你的確想在你的庫中定義它,這意味着你沒有將該目標文件與該符號的定義與其餘的庫代碼鏈接起來。

-1

我認爲這意味着:undefined在這個對象中。一些符號在運行時進行評估;這很可能是其中之一。

0

破譯這可能就像這樣:

  U [email protected]@GLIBCXX_3.4 

方式:

U->>> in your library its undefined 

什麼是不確定的?

 _ZNSs4_Rep20_S_empty_rep_storageE 

哪裏有可能找到它?

 GLIBCXX_3.4