У меня установлен gcc 3.4.6 в системах sparc9 и sparc10.У меня возникают проблемы несовместимости при попытке использовать общий объект (построенный на sparc9) на sparc10.Я не вижу никаких проблем, если я использую тот же общий объект в системе sparc9.Фрагмент из makefile: -
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)
Я пропустил другие зависимости в выводе выше, которые кажутся нормальными.
Затем япобежал «nm» по сравнению с libstdc ++. so.6 в / usr / local / lib / sparcv9 для вышеуказанного символа без ссылок и пришел со следующим выводом: -
V9---> _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode
V10--->_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
Если вы посмотрите внимательно, вы увидите разницу всимвол искаженного имени в sparc9 и sparc10 ... "ExSt12" v / s "ElSt12".
Точно так же, если я собираю myapi.so на sparc10, он не работает на sparc9 из-за несоответствия символов в V9 и V10,
Может кто-нибудь подсказать мне полезные советы, если я что-то упустил?Или мне нужно установить какой-либо пакет на V9.Я предполагаю, что общий объект, построенный на V9, должен работать на V10.
Я хотел бы добавить, что размер libstdc ++. So.6 на V9 отличается от V10.V9 имеет SMCgcc, а V10 имеет как SUNWgccruntime, так и SMCgcc.