2008-10-19 5 views
0

mysql ++ 라이브러리를 사용하고 GCC 3.3.4로 컴파일 중이었습니다.
GCC 버전에 몇 가지 버그가있어서 GCC 3.4.6으로 업그레이드했습니다.
GCC를 업그레이드 한 후 mysql ++를 재 작성하고 프로그램을 다시 컴파일했습니다. 하지만 이제 세그먼트 오류 오류가 발생합니다.GCC를 업그레이드 한 후에 MySQL ++ 라이브러리가 작동하지 않습니다.

나는 다음과 같은 메시지가 :

./mysqlTest : 기호`_ZTVSt15basic_stringbufIcSt11char_traitsIcESaIcEE ' , 재 연결 공유 객체의 크기가 다른 생각이있다.
분할 오류

내가 다시 할 필요가 있나요, 다시 링크 또는 무엇이든 그렇게 내 애플 리케이션을 다시 작동 ??
mysql C API는 어떻습니까 ?? mysql ++는 래퍼입니다.
mysql C API를 다시 빌드해야합니까?

도와주세요, 어떻게 해야할지 모르겠군요. 나는이 일을해야한다.

답변

3

CCC 표준 라이브러리를 GCC 3.3에서 GCC 3.4로 업그레이드 한 후 이어야합니다. 프로그램에서이 라이브러리를 사용하고 동시에 표준 C++ 라이브러리와 직접 링크하는 경우 링크 된 모든 라이브러리를 다시 컴파일해야합니다. 귀하의 경우, 귀하의 후속 조치를 고려할 때, libdb_cxx-4.2는 잘못되었으므로 Berkeley DB 4.2를 재 구축하십시오. 기본적으로 mysqlTest는 새로운 C++ 표준 라이브러리와 Berkeley DB를 연결하지만 Berkeley DB는 이전 버전과 연결합니다. 링커는 두 라이브러리에서 심볼을 가져 오지만 일부 라이브러리의 인라인 저장소 클래스가 변경되어 Berkeley DB가 혼동을 일으킬 수 있습니다.

사용하는 라이브러리를 확인하려면 바이너리에 대해 ldd을 실행 한 다음 목록의 각 C++ 라이브러리에 대해 ldd을 실행하십시오.

내가 내 응용 프로그램이 사용 된 몇 가지 다른 일을 재건하고 나는 간단한 프로그램이 작동 할 수 있도록 관리 : 응답에서

+0

고마워. 명확히하기 위해 약간 편집했습니다. –

0

mysql ++를 다시 빌드하기 전에 깨끗하게 만들었습니까?

mysqlTest 프로그램이 다시 컴파일되지 않았고 여전히 이전 lib을 원한다고 보입니다.

make clean (mysqlTest가 패키지에 들어오는 프로그램이라고 가정 할 때) 새로운 라이브러리를 설치 한 후에 'ldconfig'했습니까?

0

예, 재건하기 전에 "깨끗하게"만들었습니다.
mysqltest는 내 프로그램입니다. GCC를 업그레이드하기 전에 컴파일 된 버전을 가지고 있으며 정상적으로 작동합니다. 하지만 내가 업그레이드 한 후에 컴파일 한 것은 그 오류를 준다.

내가 너무 ldconfig를했다, 나는이 메시지를 얻을 :

ldconfig를을 : 나는 그냥 있는지 잘 모릅니다 심볼릭 링크

하지 /usr/lib/libdb_cxx-4.2.so 경고 또는 프로세스가 중단되었음을 나타내는 경우

0

는 moocha합니다.

아직 복잡한 프로그램에는 몇 가지 문제점이 있습니다.

나는 libd_cxx-4.2.so가 문제가 아니라는 것을 확신한다. ldconfig를 실행했을 때 그 메시지를 본 기억이 있기 때문이다. 그래도 오류 메시지를 제거하려면 어떻게해야합니까? 나는 종종 링크 문제가 있고 -L과 -l을 사용하여 gcc에 매개 변수를 전달해야한다.

관련 문제