簡體   English   中英

GLIBC 的版本

[英]Versions of GLIBC

我在 Ubuntu 機器上創建了 c++ 應用程序。 我已將二進制文件復制到 Centos 機器。 出現錯誤:

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

我決定在 ldd --version 命令的幫助下檢查我的機器中有哪些版本的 glibc:

Ubuntu: 2.23
Centos6.9: 2.12

為什么 CentOS cmplains 關於 GLIBCXX_3.4.21,而 Ubuntu 擁有 glibc 版本 2.23?

諸如GLIBCXX_3.4.21類的符號由編譯器生成,以標記編譯所使用的C ++庫版本(尤其是從頭文件和模板函數調用的非內聯函數)。 這是libstdc ++庫,不是glibc。

您正在尋找的版本是您的libstdc ++-這是C ++有趣的問題之一,模板庫往往會不時更改,因此可以將函數聲明為unsigned int func() ,然后有人決定將其更改為size_t func() 在32位計算機上沒有區別,但對於64位計算機卻有所不同,並且使用“錯誤”版本將導致返回值大小的問題。

有幾種不同的解決方案(這不是完整的列表):

  1. 確保在兩台計算機上都使用相同版本的libstdc ++。
  2. 在目標計算機上編譯代碼。
  3. 使用靜態libstdc ++

這很棒 - 我在鏈接中使用了 -static 選項,它也被問題解決了。

暫無
暫無

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

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