2013-08-27 13 views
8

Mam problemy z używaniem wewnętrznych i wewnętrznych elementów NEON w Android NDK.Wewnętrzne typy NEON działają w języku C, ale powodują błąd nieprawidłowych argumentów w C++

rodzaje NEON jak float32x4_t dają „nieprawidłowe argumenty” błąd podczas kompilacji kodu C++ z GCC 4.6 i 4.8, natomiast kod kompiluje grzywny, jeśli skompilowany jak C

Na przykład, oto niektóre kod:

inline float32x4_t VectorAdd(float32x4_t a, float32x4_t b) 
{ 
    return vaddq_f32(a, b); 
} 

mam dwa błędy tutaj:

  • w samej funkcji: Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) '.
  • Gdzie jest wywoływana funkcja: Invalid arguments ' Candidates are: ? VectorAdd(?, ?) '.

Wszystkie typy NEON są wyświetlane jako? w komunikacie o błędzie, podczas gdy typy inne niż NEON są wyświetlane poprawnie.

Dziwne jest również to, że funkcje, które używają tylko typów NEON jako wartości zwracanych (na przykład, vld1q_f32 i moje abstrakcyjne opakowanie) nie cierpią z powodu błędu.

Próbowałem tego samego kodu w GCC Explorer 4,6 i 4,5, i nie ma błędu, a poprawny i zoptymalizowany zespół jest generowany, jednak nie działa z Androidem NDK.

+4

To może być głupie pytanie ... ale czy są to błędy indeksowania zaćmień, czy są to błędy kompilatora? To znaczy. jeśli używasz ndk-build z wiersza poleceń, czy otrzymujesz dokładne błędy zgodnie z opisem? – krsteeve

+0

O tak, to błąd Eclipse. Sprawdziłem konsolę, wszystko w porządku. – Triang3l

+0

Niestety istnieje błąd indeksowania zaćmienia przy korzystaniu z CDT z ADT - mówiłem o tym w mojej odpowiedzi tutaj: http://stackoverflow.com/questions/13924184/migrate-a-c-program-to-android-ndk/18277247#18277247 – krsteeve

Odpowiedz

2

Jako obejście problemu, w oknie/Preferencje/C/C++/Analiza kodu, ustaw ważność błędów "Nieprawidłowe argumenty" na Ostrzeżenie, aby te fałszywe błędy nie uniemożliwiły uruchomienia aplikacji.