链接二进制文件时出现以下链接错误:
U std::out_of_range::~out_of_range()@@GLIBCXX_3.4.15
我想知道最后@@的含义。我认为它是符号名称的一部分,但同时它传达了一些东西?是否只在stdlib版本3.4.15中找到此符号?
答案 0 :(得分:1)
这是一个版本化的符号。当进行API更改时,这允许函数的旧版本和新版本存在于同一个库中,以便旧程序仍然可以动态链接到较新版本的库。我之前没有看到过与C ++一起使用的内容,但它通常用于glibc。
通常,当您将目标文件链接到可执行文件(或库)时,链接器将根据每个符号的最新版本进行解析,然后您的可执行文件将绑定到该版本。
是否只在stdlib版本3.4.15中找到此符号?
不完全是。这意味着您的对象/二进制文件链接到该特定版本的符号,理想情况下,它将出现在库的3.4.15版本中,但也出现在更高版本中(特别是ABI未更改的版本,但也可能在它所拥有的版本,在这种情况下,也是一个较新的版本符号。)