Android 初始化超过12字节的结构会得到SIGILL

Android 初始化超过12字节的结构会得到SIGILL,android,crash,clang,cross-compiling,armv7,Android,Crash,Clang,Cross Compiling,Armv7,我正在尝试在以下模拟器上运行交叉编译的可执行文件 系统映像;安卓-21;谷歌API;armeabi-v7a 我有下面的Makefile 以下bam.c在初始化bar时崩溃 #include <stdio.h> #include <stdint.h> struct foo { int a; int b; int c; char d; }; int main ( int argc, char *argv[] ) { struct f

我正在尝试在以下模拟器上运行交叉编译的可执行文件

系统映像;安卓-21;谷歌API;armeabi-v7a

我有下面的Makefile

以下bam.c在初始化
bar
时崩溃

#include <stdio.h>
#include <stdint.h>

struct foo {
    int a;
    int b;
    int c;
    char d;
};

int main ( int argc, char *argv[] ) {
    struct foo bar = {15,7};
    if (bar.a != 0) printf("Happy\n");
    return 0;
}
当我删除最后一个char字段时,bam.c如下所示

#include <stdio.h>
#include <stdint.h>

struct foo {
    int a;
    int b;
    int c;
    //char d;
};

int main ( int argc, char *argv[] ) {
    struct foo bar = {15,7};
    if (bar.a != 0) printf("Happy\n");
    return 0;
}
初始化structs>我这里缺少的特定大小是什么? 如果有关系的话,我会继续努力

$uname-a
Linux kdev 4.15.0-72-generic#81 Ubuntu SMP周二11月26日12:20:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


作为记录,这是我在静态链接到icui18n并尝试启动正则表达式时遇到的问题的再现。

我也遇到了同样的问题,我使用了旧版本的NDK r20b解决了这个问题。

也许再多解释一下(问题和解决方案的工作方式),答案就更合适了。很抱歉,Daniel,但我真的不知道,我只是遇到了同样的问题,并使用以前版本的NDK解决了,仅此而已_(ツ)_/¯
$ make bam
/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64/bin/clang \
        --target=armv7-none-linux-androideabi21 \
        --gcc-toolchain=/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64 \
        --sysroot=/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
        -g -DANDROID  -march=armv7-a -mthumb -std=gnu99 -o bam.o -c bam.c
/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64/bin/clang \
        --target=armv7-none-linux-androideabi21 \
        --gcc-toolchain=/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64 \
        --sysroot=/usr/local/android-sdk/ndk-cur/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
        -g -DANDROID -march=armv7-a -mthumb bam.o -o bam
adb push bam /cache/bam
bam: 1 file pushed. 0.2 MB/s (7788 bytes in 0.043s)
adb shell "/cache/bam && echo Passed"
Illegal instruction
#include <stdio.h>
#include <stdint.h>

struct foo {
    int a;
    int b;
    int c;
    //char d;
};

int main ( int argc, char *argv[] ) {
    struct foo bar = {15,7};
    if (bar.a != 0) printf("Happy\n");
    return 0;
}
make bam
/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi21 \
        --gcc-toolchain=/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
        -g -DANDROID  -march=armv7-a -mthumb -std=gnu99 -o bam.o -c bam.c
/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=armv7-none-linux-androideabi21 \
        --gcc-toolchain=/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64 --sysroot=/usr/local/android-sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
        -g -DANDROID -march=armv7-a -mthumb bam.o -o bam
adb push bam /cache/bam
bam: 1 file pushed. 0.7 MB/s (7756 bytes in 0.011s)
adb shell "/cache/bam && echo Passed"
Happy
Passed