我在sparc9和sparc10系統上安裝了gcc 3.4.6。當我嘗試在sparc10上使用共享對象(構建在sparc9上)時,我遇到了不兼容問題。我沒有看到任何問題,如果我在sparc9系統上使用相同的共享對象。從生成文件摘錄: -solaris sparc 9/10 libstdC++兼容性問題(64位)
LIB=-L/usr/lib/sparcv9 -L/usr/local/lib/sparcv9 -L/lib/sparcv9
gcc -m64 -shared -fPIC -o myapi.so.1 myapi.o $(LIB) -lc -lstdc++ -luuid
現在按照sparc10: -
ldd -d /home/myapi.so
libstdc++.so.6 => /usr/local/lib/sparcv9/libstdc++.so.6
symbol not found: _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode (./myapi.so)
我跳過上述輸出其他依賴其顯示正常。
然後,我跑在/ usr/local/lib目錄/ SPARCV9 「納米」 反對的libstdC++ so.6以上未引用的符號,並得出以下結論出來: - 。
V9---> _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode
V10--->_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
如果你仔細看,你可以看到sparc9和sparc10中的損壞名稱符號...「ExSt12」v/s「ElSt12」中的差異。
同樣,如果我在sparc10上構建myapi.so,由於V9和V10中的符號不匹配,它會在sparc9上失敗。
有人可以請我指出任何有用的提示,如果我失去了一些東西?或者我需要在V9上安裝任何軟件包。我假設在V9上構建的共享對象應該可以在V10上工作。
我想補充說的是,有一個libstdC++的大小,在V9上的so.6與V10不同。 V9有SMCgcc,V10有SUNWgccruntime和SMCgcc。
@ alanc ..感謝您對此問題的幫助。兩臺機器上的gcc/g ++版本都是3.4.6。不過,兩臺機器上的「as」版本的gcc是不同的。我無法找到solaris9的64位SUNWgccruntime軟件包(這是solaris 10中的默認軟件包)。在這種情況下,我應該檢查solaris 10上的SMCgcc版本,並在solaris 9上安裝相同的版本嗎?這是推薦的方法還是應該用其他方法? – confused
SUNWgccruntime是Solaris捆綁的gcc運行時,它首次在Solaris 10中添加 - 它從未針對Solaris 9製作。 – alanc