2011-09-28 58 views
2

我在Solaris上使用,這時候我嘗試加載第三方共享庫(libsw_api.so),產生以下錯誤:要使用哪個版本的libstdC++。so.6?

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,所有引用似乎需滿足的,特別是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 

可能是什麼問題?錯誤的版本?我在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 
+0

我不知道一個的libstdC++是否有'bad_alloc的:: what'從報頭內聯,而是和libsw_api已經針對不同的libstdC++編譯。 –

+0

也許在不同的優化設置下,OP的源代碼會用'what()'內聯編譯?只是一個猜測... –

回答

0

如果您在libstdc++.so.6文件中使用PVS,它會給你一堆匹配的條目:GLIBCXX,如果沒有匹配GLIBCXX_3.4.9的條目,然後符號bad_alloc::what是不是該庫即庫比依賴對象libsw_api.so

如果是這樣,那麼你可能需要的libstdC++的較新版本的情況下,舊的 - 它會附帶一個更新版本的g ++

+0

pvs輸出:'libgcc_s.so.1(GCC_3.3);'和'libc.so.1(SUNW_1.22,SUNWprivate_1.1);'。我會嘗試升級g ++,謝謝! – Martin

+0

我想我現在更瞭解你的評論,你想知道'libstdC++。so.6'提供了哪些接口,而不是它依賴於什麼,對吧?當我做'pvs -d/usr/sfw/lib/libstdC++。so.6'時,我根本沒有輸出。爲什麼? – Martin

2

嗨我也在升級這些文件,我注意到我應該使用libstdC++。so.6.0.9文件,而不是在/ usr/sfw中使用該文件/ lib/

0

我遇到同樣的問題。

原因是我們輸出錯誤LD_LIBRARY_PATH 這樣我們的共享庫鏈接到原始gcc的庫(3.3)而不是我們的編譯器(gcc 4.4)。

修復連接問題應該解決這一問題

相關問題