2009-06-29 12 views
6

Próbuję użyć biblioteki C++ (CLucene) z mojej aplikacji iPhone'a Cocoa Touch za pomocą Xcode 3.1.3. Wszystko działa poprawnie, gdy uruchamiam symulator iPhone'a, ale rzeczy robią się dziwne, gdy uruchamiam urządzenie. Wygląda na to, że wskaźniki nie są poprawnie przekazywane z kodu Objective-C++ (moja aplikacja) do biblioteki C++ (CLucene).Kod C++ w aplikacji na iPhone'a

Podczas debugowania aplikacji na urządzeniu mogę obejrzeć zmienną const char * przekazaną jako parametr zmiany funkcji C++ z 0x12546c0 w Objective-C++ na 0x4e w C++. Ponieważ 0x4e nie wskazuje poprawnego znaku stałego *, kod C++ kończy się niepowodzeniem. Nie dzieje się to podczas debugowania w symulatorze.

Kompiluję bibliotekę C++ bezpośrednio do aplikacji, nie łącząc się z biblioteką statyczną lub dynamiczną.

Każda pomoc będzie mile widziana.

Odpowiedz

4

Wyłączenie "Kompiluj dla kciuka" w ustawieniach kompilacji projektu rozwiązuje problem.

+0

Naprawdę? Słyszałem, że może przyspieszyć działanie programów, które używają dużo płynów. Ale nie oczekiwałbym tej odpowiedzi na twoje pytanie. – Nosredna

+0

Słyszałem to samo o przyspieszaniu kodu, ale w tym przypadku mogę odtworzyć problem, włączając "Kompilacja dla kciuka". Nie jestem pewien, dlaczego tak jest, lub dlaczego dzieje się tylko podczas łączenia z tym kodem C++, ale ma to wyraźny wpływ. –

0

Nie powinno być problemu z używaniem kodu C++ w aplikacji na iPhone'a (robię to cały czas).

Wskaźniki powinny być po prostu przekazywane jako wskaźniki bez interpretacji.
Czy jesteś pewien, że obiekt Objective-C++ jest "const char *", a nie jakimś innym typem, który jest konwertowany (niepoprawnie) na "const char *" w locie w czasie wykonywania?

+0

Tak, tworzę tablicę znaków. Wartość jest w rzeczywistości const char * i nie jest konwertowana w czasie wykonywania. –