2016-12-26 51 views
0

我正在重新建立AndroidEagleEye庫來自MacOS上的源代碼。當我編譯使用ndk-build命令,我遇到這個錯誤:android ndk-build:錯誤:未知的寄存器名稱'r0'in asm

jni/base/hook.c:42:5: error: unknown register name 'r0' in asm : "r0", "r1", "r7"

這裏是與該錯誤代碼:

void inline hook_cacheflush(unsigned int begin, unsigned int end) 

    { 
     const int syscall = 0xf0002; 
     __asm __volatile (
      "mov  r0, %0\n"   
      "mov  r1, %1\n" 
      "mov  r7, %2\n" 
      "mov  r2, #0x0\n" 
      "svc  0x00000000\n" 
      : 
      : "r" (begin), "r" (end), "r" (syscall) 
      : "r0", "r1", "r7" 
      ); 
    } 

我怎樣才能解決這個錯誤。

回答

1

ndk-build適用於所有Android架構。您還需要爲其他體系結構包含asm(並使用適當的預處理器宏來保護它們),或者在Application.mk中設置APP_ABI := armeabi armeabi-v7a

+0

謝謝。我明白了。我修改了Application.mk並且它是工作的。一個更小的問題,我編譯和遇到錯誤時,沒有返回的方法。我必須通過返回0來修復所有這些方法。通過這個有沒有ndk-build的選項? (因爲我認爲原作者已經使用了一些選項來繞過這些錯誤)。謝謝 –

+0

這個警告是非常致命的。如果你有一個缺少return語句的函數(它是未定義的行爲,你會得到各種奇怪的行爲),編譯器可以並且會毀了你的一天。如果你真的想禁用這個警告,它只是'LOCAL_CFLAGS + = -Wno-error = return-type',但這是一個非常糟糕的主意。 –

相關問題