sparc9 및 sparc10 시스템에 gcc 3.4.6이 설치되어 있습니다. sparc10에서 공유 객체 (sparc9 기반)를 사용하려고하면 호환성 문제가 발생합니다. sparc9 시스템에서 동일한 공유 객체를 사용하면 어떤 문제도 나타나지 않습니다. 메이크 파일에서 코드 조각 : - solaris sparc 9/10 libstdC++ compatibilty 문제 (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/지방/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..thanks이 문제에 대한 도움을 받으십시오. gcc/g ++ 버전은 두 컴퓨터 모두에서 3.4.6입니다. 그러나 gcc의 기본 "as"버전은 두 시스템에서 다릅니다. 솔라리스 10의 64 비트 SUNWgccruntime 패키지를 찾을 수 없습니다 (솔라리스 10의 기본 패키지입니다). 이 시나리오에서는 solaris 10에서 SMCgcc의 버전을 확인하고 solaris 9에서 동일한 버전을 설치해야합니까? 이 방법이 권장 되는가 아니면 다른 방향이어야 하는가? – confused
SUNWgccruntime은 Solaris 10에 처음 추가 된 Solaris 번들 gcc 런타임입니다. Solaris 9 용으로 만들어진 적이 없었습니다. – alanc