Какую версию libstdc ++. So.6 использовать? - PullRequest
2 голосов
/ 28 сентября 2011

Я использую стороннюю разделяемую библиотеку (libsw_api.so) в Solaris, которая при попытке загрузки выдает следующую ошибку:

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

Когда я запускаю ldd на libsw_api.so,кажется, что все ссылки выполнены, в частности, стандартная библиотека C ++, которая указывает на libstdc ++. so.6.0.3:

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

Чтоможет быть проблема?Неправильная версия?Я не очень хорошо разбираюсь в C ++ в Unix, поэтому буду признателен за любую помощь.

Может ли это несоответствие 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

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Привет, я также обновляю эти файлы, я заметил, что я должен использовать файл libstdc ++. So.6.0.9, который входит в дистрибутив, а не тот, который находится в / usr / sfw / lib /

1 голос
/ 04 декабря 2015

Я сталкиваюсь с той же проблемой.

Причина в том, что мы экспортируем неправильный LD_LIBRARY_PATH, чтобы наша общая библиотека ссылалась на исходную библиотеку gcc (3.3) вместо нашего компилятора (gcc 4.4).

Исправить проблему с компоновщиком, которая должна решить проблему

1 голос
/ 28 сентября 2011

Если вы используете pvs для файла libstdc++.so.6, он даст вам набор подходящих записей: GLIBCXX, если у вас нет записи, соответствующей GLIBCXX_3.4.9, то символ bad_alloc::what не находится вэта библиотека, т.е. библиотека старше, чем зависимый объект libsw_api.so

Если это так, то вам, вероятно, понадобится более новая версия libstdc ++ - она ​​будет поставляться с более новой версией g ++

...