2013-04-12 2 views
2

SQLite 라이브러리를 VxWorks의 RTP 응용 프로그램에 통합하려고합니다. 정적으로 SQlite와 링크를 구축했습니다. 다른 시스템에서도 잘 작동하는 간단한 테스트를 실행합니다. 이 테스트는 정말 원시적 인 테스트입니다 : sqlite_open(), sqlite_exec(), sqlite_close(). 매개 변수가 정확합니다 (다른 시스템에서 작동).SQLite를 VxWorks의 RTP 응용 프로그램에 통합하는 동안 pthread가 충돌합니다.

SIGSEGV (신호 코드 11)를 경험했습니다. 나는 "printf() s"로 충돌 지점을 추적하고 pthread_mutex_lock() 호출 후 충돌이 있음을 발견했다. 흥미로운 점은 함수 호출에서 돌아온 다음 충돌이 발생한다는 것입니다. 스택 크기 (실제 충돌 이전에 taskDelay()가 있음)를 확인했습니다. 스택은 충분히 크고 한계에서 멀리 떨어져 있습니다.

SQLITE_HOMEGROWN_RECURSIVE_MUTEX과 함께 SQlite를 빌드하려고합니다. 그리고 항상 빌드 SQLITE_THREADSAFE 1.

누군가가 그런 경험을하고 그것을 해결할 수 있었다면 알려 주시기 바랍니다.

여기에 몇 가지 세부 사항이 있습니다.

  • Vx 웍스의 wersion : 6.8
  • SQLite는 소스 : 3.7.16.1
  • 개발 환경 : Windriever는
  • CPU 아키텍처 : 파워

감사합니다 사전에

답변

1

나는 그것을 발견 . VxWorks OS에는 pthread가 없었습니다. 이제 작동합니다.

이상한 점은 pthreads 라이브러리에 대해 응용 프로그램을 빌드하는 동안이를 확인하는 방법이 없다는 것입니다.

쉬운 방법은 없지만 SIGSEGV보다 더 많은 "스텁"함수를 사용해야합니다. 아니면 나는 그런 종류의 돈을 너무 많이 요구하고 있는가?