2011-07-06 29 views
19

Tôi đang viết mã dựa trên ARM NEON cho một ứng dụng Android và tôi đã đấu tranh với một số cờ trình biên dịch không được công nhận. Sau đó tôi nhận ra rằng sự hỗ trợ cho những lá cờ đó chỉ được thêm vào khá gần đây và phiên bản GCC của tôi cũ hơn. Tôi đang làm toàn bộ điều trên Windows và bị giới hạn bởi những phiên bản Cygwin cung cấp. Đây là câu hỏi của tôi: trước khi tôi đi và cố gắng xây dựng GCC 4.6.0 trên máy tính Windows của tôi và làm Cygwin như nó, nó sẽ làm việc cho tôi hay NDK sử dụng phiên bản GCC của riêng nó và nâng cấp của tôi sẽ không ảnh hưởng đến nó ? Nếu nó có, nó có thể nói với nó để sử dụng một trình biên dịch khác nhau?Trình xử lý NDK của Android sử dụng trình biên dịch nào?

Trả lời

10

Bản thân NDK gọi trình biên dịch chéo tùy chỉnh được xây dựng trên trình biên dịch arm-eabi-gcc. Có những ví dụ trên đó của những người tạo ra các toolchains tùy chỉnh bằng cách sử dụng các triển khai GCC bog tiêu chuẩn với sự hỗ trợ cho các bộ lệnh ARM nhưng đó là cách ra khỏi giải đấu của tôi. Hầu hết những thứ tôi đã đọc trong quá khứ luôn được thảo luận bằng cách sử dụng chuỗi công cụ đi kèm với NDK để biên dịch mã gốc.

Hệ quả: Hầu hết những người đã phàn nàn và đã phải tạo chuỗi công cụ riêng của họ đều là những người buồn bã với sự hỗ trợ phụ C++ phụ thuộc trình biên dịch của chuỗi công cụ NDK. Tôi không thể nói chuyện này vì một số bài viết cũ hơn và Android thay đổi rất nhanh. Nó cũng không phải là một ý kiến ​​mà dường như bật lên tất cả các quá thường xuyên.

+4

Nó có lẽ chỉ là một GCC không chuẩn, nhưng được xây dựng với các bộ tùy chọn chính xác. Về lý thuyết, đầu ra 'gcc -v' sẽ hiển thị một dòng' Cấu hình bằng: ... 'cho thấy cách GCC được xây dựng. Thay thế 'gcc' bằng' some-prefix-gcc' khớp trong một số thư mục 'bin' của NDK. – rubenvb

+0

@rubenvb Rất có thể. Nhưng vì tôi không thể nói cho Google, tôi không thể nói điều đó với bất kỳ mức độ tự tin nào. –

+0

Cảm ơn, có ý nghĩa. – Phonon

18

Về NDK r8d nó có thể được sửa đổi theo 2 cách (xem Andriod ndk):

  • Đối ndk-build, xuất NDK_TOOLCHAIN_VERSION = 4.7 biến hoặc thêm nó vào Application.mk.
  • Đối với độc lập xây dựng, thêm --toolchain = tùy chọn để make-standalone-toolchain.sh --toolchain=arm-linux-androideabi-4.7

Mặc định trình biên dịch được thiết lập trong ndk/build/lõi/setup-toolchain.mk (xem NDK_TOOLCHAIN ​​và NDK_TOOLCHAIN_VERSION)

6

GCC đang phản đối ủng hộ kêu vang như của NDK 11 (tháng 3 năm 2016)

được đề cập trên lịch sử sửa đổi chính thức: https://developer.android.com/ndk/downloads/revision_history.html

Làm thế nào để chuyển đổi giữa các trình biên dịch được yêu cầu tại địa chỉ:

Và bạn có thể kiểm tra xem nó một cách dễ dàng với:

enum CONSTEXPR {N = 256}; 
char s[N]; 
#ifdef __clang__ 
     snprintf(s, N, "%s", "clang" __clang_version__); 
#else 
# ifdef __GNUC__ 
     snprintf(s, N, "%s %d.%d.%d", "gcc", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__); 
# endif 
#endif 

sau đó chỉ cần đăng nhập s hoặc trả lại nó đến một số TextView.

Các vấn đề liên quan