c++ - 使用哪个版本的 libstdc++.so.6?

标签 c++ solaris libstdc++

我在 Solaris 上使用第三方共享库 (libsw_api.so),当我尝试加载该库时,会产生以下错误:

fatal: relocation error: file libsw_api.so:
symbol _ZNKSt9bad_alloc4whatEv: referenced symbol not found
The program exited with error code 1

当我在 libsw_api.so 上运行 ldd 时,所有引用似乎都已满足,特别是指向 libstdc++.so.6.0.3 的 C++ 标准库:

glispa02(fostopr)$ ldd libsw_api.so
...
libstdc++.so.6 =>        /usr/sfw/lib/libstdc++.so.6
...
glispa02(fostopr)$ ls -l /usr/sfw/lib/libstdc++.so.6
lrwxrwxrwx   1 root     root          18 Jun 21  2010 /usr/sfw/lib/libstdc++.so.6 -> libstdc++.so.6.0.3

但是该库不会导出 _ZNKSt9bad_alloc4whatEv,

glispa02(fostopr)$ nm /usr/sfw/lib/libstdc++.so.6 | grep bad_alloc                          
[7592]  |    752340|      64|FUNC |GLOB |0    |2653   |_ZNSt9bad_allocD0Ev
[7324]  |    752284|      56|FUNC |GLOB |0    |2652   |_ZNSt9bad_allocD1Ev
[8077]  |    752228|      56|FUNC |GLOB |0    |2651   |_ZNSt9bad_allocD2Ev
[7519]  |    356736|      76|FUNC |GLOB |0    |473    |_ZSt17__throw_bad_allocv
[7341]  |    983588|      12|OBJT |WEAK |0    |3842   |_ZTISt9bad_alloc
[6569]  |    777008|      13|OBJT |WEAK |0    |3317   |_ZTSSt9bad_alloc
[7299]  |    983568|      20|OBJT |WEAK |0    |3841   |_ZTVSt9bad_alloc

可能是什么问题?版本错误?我不太擅长 Unix 上的 C++,所以我会感谢任何帮助。

SPARC32PLUS 与 SPARC 不匹配可能是问题的原因吗?

glispa02(fostopr)$ file libsw_api.so        
libsw_api.so:   ELF 32-bit MSB dynamic lib SPARC32PLUS Version 1, V8+ Required,    dynamically linked, not stripped
glispa02(fostopr)$ file /usr/sfw/lib/libstdc++.so.6.0.3 
/usr/sfw/lib/libstdc++.so.6.0.3:        ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped, no debugging information available

我的系统:

glispa02(fostopr)$ cat /etc/release                    
                  Solaris 10 10/09 s10s_u8wos_08a SPARC
       Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
                    Use is subject to license terms.
                       Assembled 16 September 2009
glispa02(fostopr)$ uname -a
SunOS glispa02 5.10 Generic_141444-09 sun4u sparc SUNW,SPARC-Enterprise

最佳答案

您好,我也在升级这些文件,我注意到我应该使用发行版附带的 libstdc++.so.6.0.9 文件,而不是/usr/sfw/lib/中的文件

关于c++ - 使用哪个版本的 libstdc++.so.6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7580869/

相关文章:

xml - 验证xml文件+如何将xmllint命令设置为静默模式

solaris - 需要将 Java 应用程序从 Solaris 10 迁移到 AIX。 AIX 平台有可用的 Oracle 或 OpenJDK 吗?

c++ - 测试 libstdc++ 的版本是否使用符合 C++11 的 std::string

c++ - 初始化列表中的隐式转换失败

c++ - 模板层次结构中的可选虚函数取决于参数

c++ - 我似乎无法使用 enable_if 实例化类特化

c++ - 将十六进制字符串转换为结构体

c++ - 为什么 map::operator[] 设计缓慢?

c#代码转成QT C++

c++ - boost::program_options 类字段