我在 sparc9 和 sparc10 系统上安装了 gcc 3.4.6。当我尝试在 sparc10 上使用共享对象(基于 sparc9 构建)时,我遇到了不兼容问题。如果我在 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)
我在上面的输出中跳过了其他看起来正常的依赖项。
然后,我针对上述未引用符号在 /usr/local/lib/sparcv9 中针对 libstdc++.so.6 运行“nm”并得出以下结论:-
V9---> _ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffExSt12_Ios_SeekdirSt13_Ios_Openmode
V10--->_ZNSt15basic_streambufIcSt11char_traitsIcEE7seekoffElSt12_Ios_SeekdirSt13_Ios_Openmode
如果您仔细观察,您会发现 sparc9 和 sparc10 中的名称符号不同...“ExSt12”与“ElSt12”。
同样,如果我在 sparc10 上构建 myapi.so,由于 V9 和 V10 中的符号不匹配,它会在 sparc9 上失败。
有人可以指出我是否遗漏了什么有用的提示吗?或者我需要在 V9 上安装任何软件包吗?我假设基于 V9 构建的共享对象应该可以在 V10 上运行。
我想补充一点,V9 上的 libstdc++.so.6 的大小与 V10 不同。V9 具有 SMCgcc,V10 具有 SUNWgccruntime 和 SMCgcc。