簡體   English   中英

nm:“U”符號未定義

[英]nm: “U” The symbol is undefined

當我在我的一個lib上nm:

nm libmylib.so

我得到這樣一條線

             U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4

我查看了nm的手冊頁,我得到了“U”符號未定義。 未定義的符號究竟意味着什么?

如果它確實是未定義的,那么為什么nm會報告它呢?

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

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

在您的情況下,它看起來像您的實現的C庫中的符號,因此您可能希望在您自己的庫中未定義。 它將在你的libc.so中定義,無論在哪里,可能是/ usr / lib。

解密這個可以這樣做:

           U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4

手段:

    U->>> in your library its undefined

什么是未定義的?

     _ZNSs4_Rep20_S_empty_rep_storageE

哪里有可能找到它?

      GLIBCXX_3.4

現在針對您的問題:“為什么它未定義:”,因為鏈接器無法找到它的定義

第二部分:“如果未定義為什么要報告”,nm實用程序應讀取lib的整個符號表並打印出來。 因此,它只是閱讀和打印它而不對其應用任何操作。

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

我認為這意味着:在這個對象中未定義。 某些符號在運行時進行評估; 這很可能就是其中之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM