2009-06-29 9 views
6

Xcode 3.1.3을 사용하는 Cocoa Touch iPhone 애플리케이션에서 C++ 라이브러리 (CLucene)를 사용하려고합니다. iPhone 시뮬레이터에서 실행하면 모든 것이 잘 작동하지만 기기를 실행할 때 이상한 점이 있습니다. 포인터가 Objective-C++ 코드 (내 응용 프로그램)에서 C++ 라이브러리 (CLucene)로 올바르게 전달되지 않는 것 같습니다.iPhone 앱의 C++ 코드

장치에서 응용 프로그램을 디버깅하는 동안 Objective-C++의 0x12546c0에서 C++의 0x4e 로의 C++ 함수 변경에 대한 매개 변수로 전달 된 const char * 변수를 볼 수 있습니다. 0x4e는 유효한 const char *를 가리 키지 않기 때문에 C++ 코드가 실패합니다. 이것은 시뮬레이터에서 디버깅 할 때 발생하지 않습니다.

정적 또는 동적 lib에 연결하지 않고 C++ 라이브러리를 앱에 직접 컴파일하고 있습니다.

도움을 주시면 감사하겠습니다.

답변

4

프로젝트의 빌드 설정에서 "Thumb 용으로 컴파일"을 비활성화하면 문제가 해결됩니다.

+0

정말요? 많은 수레를 사용하는 프로그램의 속도를 높일 수 있다고 들었습니다. 그러나 나는이 질문에 대한 답을 기대하지 못했습니다. – Nosredna

+0

코드 속도 향상에 관해서도 똑같은 얘기를 들었지만이 경우에는 "Compile for Thumb"을 사용하여 문제를 재현 할 수 있습니다. 이것이 왜 그런지, 또는이 C++ 코드에 링크 할 때만 발생하는 이유는 확실하지 않지만 분명히 영향을 미칩니다. –

0

iPhone 앱에서 C++ 코드를 사용하는 데 문제가 없어야합니다 (항상 해드립니다).

포인터는 해석없이 포인터로 전달되어야합니다.
Objective-C++ 개체가 'const char *'이고 런타임에 'const char *'로 변환되는 (다른 형식이 아닌) 것이 확실합니까?

+0

예, 문자 배열을 만듭니다. 값은 실제로 const char *이며 런타임에 변환되지 않습니다. –