У меня установлен 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" и "ElSt12".
Точно так же, если я соберу myapi.so на sparc10, он выйдет из строя на sparc9 из-за несоответствия символов в V9 и V10.
Может ли кто-нибудь указать мне какие-либо полезные советы, если я что-то упустил? Или мне нужно установить какой-либо пакет на V9. Я предполагаю, что общий объект, построенный на V9, должен работать на V10.
Я хотел бы добавить, что размер libstdc++.so.6 на V9 отличается от V10. V9 имеет SMCgcc, а V10 имеет SUNWgccruntime и SMCgcc.