[英]what is the meaning of @@ sign after a symmbol name
鏈接二進制文件時出現以下鏈接錯誤:
U std::out_of_range::~out_of_range()@@GLIBCXX_3.4.15
我想知道最后@@的含義。 我認為它是符號名稱的一部分,但同時它傳達了什么意思? 它是否表示僅在stdlib 3.4.15版中找到此符號?
這是一個版本化的符號。 進行API更改后,這允許函數的舊版本和新版本都存在於同一庫中,因此舊程序仍可以動態鏈接到庫的新版本。 我以前沒有見過C ++使用它,但是它在glibc中很常用。
通常,當您將目標文件鏈接到可執行文件(或庫)時,鏈接器將針對每個符號的最新版本進行解析,然后將可執行文件綁定到該版本。
它是否表示僅在stdlib 3.4.15版中找到此符號?
不完全是。 這意味着您的對象/二進制文件已鏈接到該符號的特定版本,理想情況下,該版本將出現在庫的3.4.15版本中,但也會出現在更高版本中(尤其是ABI不變的版本,但可能還會出現在該版本中)。版本的地方有,在這種情況下, 也會有一個較新的版本符號)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.