你如何find你的linux机器上安装了什么版本的libstdc ++库?
我发现了以下命令: strings /usr/lib/libstdc++.so.6 | grep GLIBC 从这里 strings /usr/lib/libstdc++.so.6 | grep GLIBC 。 它似乎工作,但这是一个特设/启发式的方法。 
有没有一个特定的命令可以用来查询库的C ++版本? 或者是我find了接受方法的方法?
要find正在使用哪个库,你可以运行
  $ /sbin/ldconfig -p | grep stdc++ libstdc++.so.6 (libc6) => /usr/lib/libstdc++.so.6 
libstdc ++ 3.4.0及更高版本的兼容版本列表由
  $ strings /usr/lib/libstdc++.so.6 | grep LIBCXX GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 ... 
 对于早期版本,符号GLIBCPP被定义。 
 库的date标记在macros__GLIBCXX__或__GLIBCPP__定义,具体取决于版本: 
 // libdatestamp.cxx #include <cstdio> int main(int argc, char* argv[]){ #ifdef __GLIBCPP__ std::printf("GLIBCPP: %d\n",__GLIBCPP__); #endif #ifdef __GLIBCXX__ std::printf("GLIBCXX: %d\n",__GLIBCXX__); #endif return 0; } $ g++ libdatestamp.cxx -o libdatestamp $ ./libdatestamp GLIBCXX: 20101208 
文档中列出了libstdc ++版本的date戳记表:
 我倾向于使用的机制是readelf -V的组合,以从libstdc ++转储.gnu.version信息,然后查找与提取的最大GLIBCXX_值匹配的表。 
 readelf -sV /usr/lib/libstdc++.so.6 | sed -n 's/.*@@GLIBCXX_//p' | sort -u -V | tail -1 
 如果您的sort版本太旧,无法使用-V选项(按版本号sorting),那么您可以使用: 
 tr '.' ' ' | sort -nu -t ' ' -k 1 -k 2 -k 3 -k 4 | tr ' ' '.' 
 而不是sort -u -V ,最多可以sorting4个版本的数字。 
一般来说,匹配ABI版本应该足够好。
 如果你正在试图追踪libstdc++.so.<VERSION> ,你可以使用如下的bash: 
 file=/usr/lib/libstdc++.so.6 while [ -h $file ]; do file=$(ls -l $file | sed -n 's/.*-> //p'); done echo ${file#*.so.} 
 所以对于我的系统,这取得了6.0.10 。 
但是,如果你想获得一个在systemX上编译的二进制文件,在systemY上工作,那么这些types的东西只会帮你达到目的。 在这些情况下,携带libstdc ++。的副本,以便用于应用程序,然后运行脚本来执行:
 export LD_LIBRARY_PATH=<directory of stashed libstdc++.so> exec application.bin "$@" 
通常围绕.so的问题,即与应用程序的版本不兼容。 对于更多的环境差异,我倾向于只添加所有的依赖库,直到应用程序正常工作。 这是linux的等价物,对于windows来说,会被认为是地狱 。
你想知道什么?
 共享库soname? 这是文件名libstdc++.so.6的一部分,或由readelf -d /usr/lib64/libstdc++.so.6 | grep soname  readelf -d /usr/lib64/libstdc++.so.6 | grep soname 。 
小修订号? 您应该能够通过简单地检查符号链接指向的内容来获取:
 $ ls -l /usr/lib/libstdc++.so.6 lrwxrwxrwx. 1 root root 19 Mar 23 09:43 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.16 
 这告诉你它是6.0.16,这是libstdc++.so.6版本的第16版本,它对应于GLIBCXX_3.4.16符号版本。 
 或者你的意思是它的来源? 它是GCC的一部分,所以它与GCC是同一个版本,所以除非你通过安装无与伦比的g++和libstdc++.so版本来搞砸你的系统, libstdc++.so你可以从这里得到: 
 $ g++ -dumpversion 4.6.3 
或者,在大多数发行版上,你可以问包pipe理员。 在我的Fedora主机上
 $ rpm -q libstdc++ libstdc++-4.6.3-2.fc16.x86_64 libstdc++-4.6.3-2.fc16.i686 
正如其他答案所述,您可以通过检查ABI文档将发布映射到库版本
 您可以将g++ --version与GCC ABI文档结合使用来查找。