2013-08-27 64 views
8

Tôi gặp vấn đề với việc sử dụng NEON nội tại và lắp ráp nội tuyến trong Android NDK.Các loại nội tại NEON hoạt động trong C nhưng ném lỗi đối số không hợp lệ trong C++

loại NEON như float32x4_t đưa ra một thông báo lỗi "đối số không hợp lệ" khi biên dịch C++ với GCC 4.6 và 4.8, tuy nhiên, mã biên dịch tốt nếu biên soạn như C.

Ví dụ, đây là một số mã:

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

tôi nhận được hai lỗi ở đây:

  • Trong chức năng riêng của mình: Invalid arguments ' Candidates are: ? vaddq_f32(?, ?) '.
  • Trường hợp chức năng được gọi là: Invalid arguments ' Candidates are: ? VectorAdd(?, ?) '.

Tất cả các loại NEON được hiển thị? trong thông báo lỗi, trong khi các loại không phải NEON được hiển thị chính xác. Điều này cũng lạ là các chức năng chỉ sử dụng các loại NEON làm giá trị trả lại (ví dụ, vld1q_f32 và trình bao bọc trừu tượng của tôi) không bị lỗi.

Tôi đã thử cùng một mã trong GCC Explorer 4.6 và 4.5 và không có lỗi và lắp ráp đúng và được tối ưu hóa được tạo ra, tuy nhiên, nó không hoạt động với NDK của Android.

+4

Đây có thể là một câu hỏi ngớ ngẩn ... nhưng những lỗi lập chỉ mục nhật thực này hay chúng là lỗi trình biên dịch? I E. nếu bạn sử dụng ndk-build từ dòng lệnh, bạn có nhận được các lỗi chính xác như được mô tả không? – krsteeve

+0

Ồ, vâng, đó là một lỗi của Eclipse. Tôi đã kiểm tra giao diện điều khiển, mọi thứ được xây dựng tốt. – Triang3l

+0

Thật không may có một lỗi lập chỉ mục nhật thực đã biết khi sử dụng CDT với ADT - Tôi đã nói về nó trong câu trả lời của tôi ở đây: http://stackoverflow.com/questions/13924184/migrate-a-c-program-to-android-ndk/18277247#18277247 – krsteeve

Trả lời

2

Để giải quyết sự cố, trong Window/Preferences/C/C++/Phân tích mã, hãy đặt mức độ nghiêm trọng của lỗi "Đối số không hợp lệ" thành Cảnh báo, do đó các lỗi không có thật này sẽ không ngăn khởi chạy ứng dụng.