GVKun编程网logo

运送libstdc .so.6与应用程序(运送系统)

18

以上就是给各位分享运送libstdc.so.6与应用程序,其中也会对运送系统进行解释,同时本文还将给你拓展/lib64/libstdc++.so.6:version`GLIBCXX_3.4.21''n

以上就是给各位分享运送libstdc .so.6与应用程序,其中也会对运送系统进行解释,同时本文还将给你拓展/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21'' not found、/usr/lib/libstdc++.so.6: version `GLIBC''---转载、/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15''、/usr/lib64 / libstdc .so.6:找不到版本`GLIBCXX_3.4.15′等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

运送libstdc .so.6与应用程序(运送系统)

运送libstdc .so.6与应用程序(运送系统)

我想在我的应用程序中使用 gcc 4.8.1(需要libstdc .so.6.0.18),但客户只有libstdc .so.6.0.13.我一直在使用-static-libgcc -static-stdlibc一段时间,但我的应用程序包含几个动态链接库和一个主应用程序.这意味着在编译每个动态库时,它们必须静态编译标准库,这是多余且浪费的.我想用我的产品运送我选择的标准库,但每次我在他们的环境中运行我的应用程序时,它总是加载错误的标准库.无论我似乎做什么,它都更喜欢/usr/lib64 /版本(它似乎优先于LD_LIBRARY_PATH).

约束:

>我不允许强迫他们升级到新的标准库.
>我不想让动态库保持静态. (我可以将所有内容静态编译到主应用程序中一次,但是有一些后勤障碍阻止我将某些库重新编译为静态库).

-Wl,-rpath = $(path_to_directory)有点危险,但它是合法的,因为客户确实提供了一些允许我设置路径变量的设置.但是,设置我的新stdlibc的rpath似乎并没有覆盖默认的/usr/lib64版本.我仍然得到GLIBCXX错误,因为它不会使用正确的库.

当然有一个优雅的解决方案吗?

也许我的程序中只有一个错误.这是一个例子(对于审查员很抱歉,但它只是用户名的东西):

~/example$pwd
/home/username/example
~/example$echo $LD_LIBRARY_PATH

~/example$ls
Makefile  libstdc++.so.6.0.18  test.cpp
~/example$make
g++ -std=c++11 -Wall -Werror test.cpp -o test
~/example$ldd test
./test: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./test)
    linux-vdso.so.1 =>  (0x00007fffe5919000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000390b800000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003904800000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000390b400000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003904400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003904000000)
~/example$setenv LD_LIBRARY_PATH /home/username/example
~/example$echo $LD_LIBRARY_PATH
/home/username/example
~/example$ldd test
./test: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./test)
    linux-vdso.so.1 =>  (0x00007fff2d3ff000)
    libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x000000390b800000)
    libm.so.6 => /lib64/libm.so.6 (0x0000003904800000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x000000390b400000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003904400000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003904000000)

对不起伙计们,我犯了一个相当愚蠢的错误……

~/example$file libstdc++.so.6.0.18 
libstdc++.so.6.0.18: ELF 32-bit LSB shared object,Intel 80386,version 1 (SYSV),dynamically linked,not stripped

有些dweeb构建了错误的库版本,另一个dweeb(即我自己)尝试在64位机器上使用它.使用LD_LIBRARY_PATH一直在工作……

解决方法

您的问题是可执行文件链接到soname libstdc .so.6而不是完整库文件名libstdc .so.6.0.16.动态链接器将在通常的位置查找libstdc .so.6(即LD_LIBRARY_PATH,DT_RPATH,ldconfig dirs等),因此为了确保找到6.0.18版本,您需要一个名为libstdc .so.6的符号链接指向它.

而不是使用LD_LIBRARY_PATH(在您无法控制的机器上很脆弱,因为用户可能会改变他们的环境)我更喜欢使用’-Wl,-rpath,$ORIGIN’进行链接(注意,必须使用引号来阻止shell扩展$ORIGIN )

$ORIGIN的RPATH告诉动态链接器开始在与可执行文件相同的目录中查找共享库,因此如果您将libstdc .so与可执行文件一起发送,它将被找到.如果要将可执行文件发送到bin目录并将库放在lib目录中,可以使用’-Wl,$ORIGIN /../ lib’或相对于可执行文件位置的其他路径.

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

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

在执行程序出现这个问题有两种情况

 

原因1:已经安装过高版本但未软连接

解决方法:查找编译gcc时生成的最新动态库

find / -name "libstdc++.so*" 输出:

cd /usr/lib64
ll stdlibc++*

以看到当前libstdc++so.6指向13的版本,接下来把刚刚的高版本的复制到这里并重建软链即可

rm libstdc++.so.6

ln -s libstdc++.so.6.0.21 libstdc++.so.6

现在再执行就ok了!

 

原因2:版本低

解决方法:

  • 查看gcc版本中包含哪些库。

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

从网上下载高版本的libstdc++.so.6.0.13以上的版本,比如libstdc++.so.6.0.21。(或者从其它机器上拷贝一份)

cd /usr/lib64
ll stdlibc++*

cp ../libstdc++.so.6.0.21 .

rm libstdc++.so.6

ln -s libstdc++.so.6.0.21 libstdc++.so.6

 在查看发现已经升级

 

 再次执行发现已经没有问题了!

 

/usr/lib/libstdc++.so.6: version `GLIBC''---转载

/usr/lib/libstdc++.so.6: version `GLIBC''---转载

转载:http://www.cnblogs.com/yingsi/p/3290958.html

1.下载QT5 SDK

下载地址:http://qt-project.org/downloads。

2.安装QT5

下载完后,假设放在Download/,切换到该目录,输入:./qt-linux-opensource-5.0.0-x86-offline.run运行;

出现以下错误:./qt-linux-opensource-5.0.0-x86-offline.run:
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15'' not found (required
by ./qt-linux-opensource-5.0.0-x86-offline.run)

3.解决错误

出现该错误的原因是当前的GCC版本中,没有GLIBCXX_3.4.15,需要安装更高版本。

我们可以输入:strings /usr/lib/libstdc++.so.6 | grep GLIBCXX,查看当前的GCC版本,

结果如下:

GLIBCXX_3.4
GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5
GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10
GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBC_2.0 GLIBC_2.3
GLIBC_2.4 GLIBC_2.1 GLIBC_2.1.3 GLIBC_2.3.2 GLIBC_2.2 GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

可见没有GLIBCXX_3.4.15.

下载新版本,

地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb

假设下载的文件放在Download/。

解压:ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz

解压后出现Download/usr目录;

1)cd Download/usr/lib/i380-linux-gun

2) su root

3) cp libstdc++.so.6.0.17 /usr/lib

4) cd /usr/lib

5) rm libstdc++.so.6

6) ln libstdc++.so.6.0.17 libstdc++.so.6重新建立软连接

这时,我们再输入:strings /usr/lib/libstdc++.so.6 | grep GLIBCXX,结果为:

GLIBCXX_3.4
GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5
GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10
GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14
GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17
GLIBCXX_DEBUG_MESSAGE_LENGTH

看,GLIBCXX_3.4.15已经有了!

3. 重新切换到Download即可运行安装QT5了.

 ---------------------------------------------------------------------------------------------------------------------------------------

当在CentOS 6.2下执行某些命令时,有缺少共享库的报错:
 
error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

解决办法:
 1、执行命令: yum whatprovides libstdc++.so.6
 
然后会提示哪个安装包有这个库文件如下:
 
[root@localhost  ~]# yum whatprovides libstdc++.so.6
 Loaded plugins: aliases, changelog, downloadonly, fastestmirror, kabi, presto, refresh-packagekit, security, tmprepo, verify,
              : versionlock
 Loading support for CentOS kernel ABI
 Loading mirror speeds from cached hostfile
  * base: centos.ustc.edu.cn
  * centosplus: centos.ustc.edu.cn
  * contrib: centos.ustc.edu.cn
  * extras: centos.ustc.edu.cn
  * updates: centos.ustc.edu.cn
 libstdc++-4.4.7-3.el6.i686 : GNU Standard C++ Library
 Repo        : base
 Matched from:
 Other      : libstdc++.so.6

2、然后执行:
 
yum install libstdc++-4.4.7-3.el6.i686


/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15''

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15''

./filezilla: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15'' not found (required by ./filezilla)

如果是 64 位系统报错信息如下:

./filezilla: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15'' not found (required by ./filezilla)

原因是没有 GLIBCXX_3.4.15 版本,或是更高的版本。
输入命令查询一下结果:

[root@localhost ~]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

我们看到当前 GCC 版本中的确没有 GLIBCXX_3.4.15。

64 位系统命令为:

[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

下载新版本,地址:http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_i386.deb

64 位系统:
http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb

假设下载的文件放在 /data0/software/。
解压:

[root@localhost software]# ar -x libstdc++6_4.7.2-5_i386.deb && tar xvf data.tar.gz
解压后出现 /data0/software/usr 目录;
[root@localhost software]# cd  /data0/software/usr/lib/i380-linux-gun
[root@localhost i386-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib
[root@localhost i386-linux-gnu]# /usr/lib
[root@localhost lib]# rm libstdc++.so.6
[root@localhost lib]# ln libstdc++.so.6.0.17 libstdc++.so.6

注意 64 位系统为
[root@localhost software]# cd  /data0/software/usr/lib/x86_64-linux-gnu
[root@localhost x86_64-linux-gnu]# cp libstdc++.so.6.0.17 /usr/lib64
[root@localhost x86_64-linux-gnu]# /usr/lib
[root@localhost lib64]# rm libstdc++.so.6
[root@localhost lib64]# ln libstdc++.so.6.0.17 libstdc++.so.6

重新建立软连接,我们再输入命令查询一下结果:

[root@localhost lib]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_DEBUG_MESSAGE_LENGTH

已经安装好 GLIBCXX_3.4.15 啦。

重新切换到 filezilla 目录并运行,正常啦!./filezilla: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15'' not found (required by ./filezilla) 已经解决。


/usr/lib64 / libstdc .so.6:找不到版本`GLIBCXX_3.4.15′

/usr/lib64 / libstdc .so.6:找不到版本`GLIBCXX_3.4.15′

我正在尝试运行appium测试.但是我得到错误说:

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found

我正在使用RedHat6.6.当我跑:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

我明白了:

GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

是否有可能获得RedHat6.6的GLIBCXX_3.4.15?

解决方法:

你的libstdc .so.6似乎对你的程序太旧了,你可以尝试更新你的libstdc .so.在我的centos7中,我的libstdc .so.6链接到libstdc .so.6.0.19

libstdc++.so.6 -> libstdc++.so.6.0.19

里面有字符串

[root]#strings libstdc++.so.6|grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

也许你可以下载一个更新的版本并重新链接libstdc .so.6,但是你应该关心你系统中的其他程序是否仍能正常工作.

更新这个lib你应该小心谨慎,可能需要新的问题,我已经更换了libc.so.6,然后所有命令都无法工作,我用/ sbin / sln修复它.见glibc: elf file OS ABI invalid

从pkgs.org下载libstdc,然后解压缩.

rpm2cpio libstdc++-4.9.2-1.fc21.x86_64.rpm |cpio -idmv
cp ./usr/lib64/libstdc++.so.6.0.20 /usr/lib64

也许你可以在执行程序之前使用LD_PRELOAD = /usr/lib64 / libstdc .so.6.0.20.像这样

LD_PRELOAD=/usr/lib64/libstdc++.so.6.0.20 ls -hl

或者导出LD_LIBRARY_PATH = /usr/lib64 / libstdc .so.6.0.20,但我不确定它是否可行.

如果重新链接libstdc .so.6,请小心.

今天关于运送libstdc .so.6与应用程序运送系统的分享就到这里,希望大家有所收获,若想了解更多关于/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21'' not found、/usr/lib/libstdc++.so.6: version `GLIBC''---转载、/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15''、/usr/lib64 / libstdc .so.6:找不到版本`GLIBCXX_3.4.15′等相关知识,可以在本站进行查询。

本文标签: