你如何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文档结合使用来查找。