質問編集履歴
12
strace追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -77,6 +77,122 @@
|
|
77
77
|
- アーキテクチャが一致しているかの確認
|
78
78
|
Android, LinuxどちらもARM32環境で一致しています。
|
79
79
|
|
80
|
+
- straceの確認
|
81
|
+
```
|
82
|
+
$ strace ./a.out
|
83
|
+
execve("./a.out", ["./a.out"], 0xbe816680 /* 26 vars */) = 0
|
84
|
+
brk(NULL) = 0x344000
|
85
|
+
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f55000
|
86
|
+
access("/etc/ld.so.preload", R_OK) = 0
|
87
|
+
openat(AT_FDCWD, "/etc/ld.so.preload", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
88
|
+
fstat64(3, {st_mode=S_IFREG|0644, st_size=54, ...}) = 0
|
89
|
+
mmap2(NULL, 54, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0xb6f54000
|
90
|
+
close(3) = 0
|
91
|
+
readlink("/proc/self/exe", "/home/pi/a.out", 4096) = 20
|
92
|
+
openat(AT_FDCWD, "/usr/lib/arm-linux-gnueabihf/libarmmem-v7l.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
93
|
+
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\254\3\0\0004\0\0\0"..., 512) = 512
|
94
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
95
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
96
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
97
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
98
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
99
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
100
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
101
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
102
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
103
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
104
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
105
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
106
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
107
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
108
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
109
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
110
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
111
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
112
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
113
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
114
|
+
_llseek(3, 16748, [16748], SEEK_SET) = 0
|
115
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 960) = 960
|
116
|
+
_llseek(3, 16424, [16424], SEEK_SET) = 0
|
117
|
+
read(3, "A,\0\0\0aeabi\0\1\"\0\0\0\0056\0\6\6\10\1\t\2\n\3\f\1\22\4\24"..., 45) = 45
|
118
|
+
fstat64(3, {st_mode=S_IFREG|0644, st_size=17708, ...}) = 0
|
119
|
+
mmap2(NULL, 81964, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f12000
|
120
|
+
mprotect(0xb6f16000, 61440, PROT_NONE) = 0
|
121
|
+
mmap2(0xb6f25000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0xb6f25000
|
122
|
+
close(3) = 0
|
123
|
+
munmap(0xb6f54000, 54) = 0
|
124
|
+
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
125
|
+
fstat64(3, {st_mode=S_IFREG|0644, st_size=80552, ...}) = 0
|
126
|
+
mmap2(NULL, 80552, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6efe000
|
127
|
+
close(3) = 0
|
128
|
+
openat(AT_FDCWD, "/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
129
|
+
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0 \n\0\0004\0\0\0"..., 512) = 512
|
130
|
+
_llseek(3, 8688, [8688], SEEK_SET) = 0
|
131
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
|
132
|
+
_llseek(3, 8340, [8340], SEEK_SET) = 0
|
133
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
134
|
+
_llseek(3, 8688, [8688], SEEK_SET) = 0
|
135
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
|
136
|
+
_llseek(3, 8340, [8340], SEEK_SET) = 0
|
137
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
138
|
+
_llseek(3, 8688, [8688], SEEK_SET) = 0
|
139
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 1080) = 1080
|
140
|
+
_llseek(3, 8340, [8340], SEEK_SET) = 0
|
141
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
142
|
+
fstat64(3, {st_mode=S_IFREG|0644, st_size=9768, ...}) = 0
|
143
|
+
mmap2(NULL, 73924, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6eeb000
|
144
|
+
mprotect(0xb6eed000, 61440, PROT_NONE) = 0
|
145
|
+
mmap2(0xb6efc000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1000) = 0xb6efc000
|
146
|
+
close(3) = 0
|
147
|
+
openat(AT_FDCWD, "/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
148
|
+
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\300x\1\0004\0\0\0"..., 512) = 512
|
149
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
150
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
151
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
152
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
153
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
154
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
155
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
156
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
157
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
158
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
159
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
160
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
161
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
162
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
163
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
164
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
165
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
166
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
167
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
168
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
169
|
+
_llseek(3, 1293204, [1293204], SEEK_SET) = 0
|
170
|
+
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 2800) = 2800
|
171
|
+
_llseek(3, 1289788, [1289788], SEEK_SET) = 0
|
172
|
+
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\23\1\24"..., 47) = 47
|
173
|
+
fstat64(3, {st_mode=S_IFREG|0755, st_size=1296004, ...}) = 0
|
174
|
+
mmap2(NULL, 1364764, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6d9d000
|
175
|
+
mprotect(0xb6ed5000, 65536, PROT_NONE) = 0
|
176
|
+
mmap2(0xb6ee5000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x138000) = 0xb6ee5000
|
177
|
+
mmap2(0xb6ee8000, 8988, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6ee8000
|
178
|
+
close(3) = 0
|
179
|
+
set_tls(0xb6f564d0) = 0
|
180
|
+
mprotect(0xb6ee5000, 8192, PROT_READ) = 0
|
181
|
+
mprotect(0xb6efc000, 4096, PROT_READ) = 0
|
182
|
+
mprotect(0xb6f25000, 4096, PROT_READ) = 0
|
183
|
+
mprotect(0x20000, 4096, PROT_READ) = 0
|
184
|
+
mprotect(0xb6f57000, 4096, PROT_READ) = 0
|
185
|
+
munmap(0xb6efe000, 80552) = 0
|
186
|
+
brk(NULL) = 0x344000
|
187
|
+
brk(0x365000) = 0x365000
|
188
|
+
openat(AT_FDCWD, "./libhelloworld.so", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 3
|
189
|
+
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\0\0\0\0004\0\0\0"..., 512) = 512
|
190
|
+
close(3) = 0
|
191
|
+
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=NULL} ---
|
192
|
+
+++ killed by SIGSEGV +++
|
193
|
+
Segmentation fault
|
194
|
+
```
|
195
|
+
|
80
196
|
### 補足情報(FW/ツールのバージョンなど)
|
81
197
|
- OnePlus One(ARM32)(Android 9)
|
82
198
|
CPU: Snapdragon 801(MSM8974PRO-AC)
|
11
修正
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
10
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -79,8 +79,11 @@
|
|
79
79
|
|
80
80
|
### 補足情報(FW/ツールのバージョンなど)
|
81
81
|
- OnePlus One(ARM32)(Android 9)
|
82
|
-
|
82
|
+
CPU: Snapdragon 801(MSM8974PRO-AC)
|
83
83
|
|
84
|
+
- Raspberry Pi 4 Model B Rev 1.2 (ARM32)(Raspbian 32bit GNU/Linux 10 (buster))
|
85
|
+
CPU: BCM2711(Cortex-A72)
|
86
|
+
|
84
87
|
```cmd
|
85
88
|
$ ndk-build -version
|
86
89
|
GNU Make 4.2.1
|
9
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -79,7 +79,7 @@
|
|
79
79
|
|
80
80
|
### 補足情報(FW/ツールのバージョンなど)
|
81
81
|
- OnePlus One(ARM32)(Android 9)
|
82
|
-
- Raspberry Pi 4 Model B(ARM32)(Raspbian GNU/Linux 10 (buster))
|
82
|
+
- Raspberry Pi 4 Model B(ARM32)(Raspbian 32bit GNU/Linux 10 (buster))
|
83
83
|
|
84
84
|
```cmd
|
85
85
|
$ ndk-build -version
|
8
修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
AndroidOSの共有ライブラリは
|
1
|
+
AndroidOSの共有ライブラリはLinuxで利用できないのでしょうか?
|
body
CHANGED
File without changes
|
7
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,6 +6,8 @@
|
|
6
6
|
AndroidもLinuxの一種のはずです。
|
7
7
|
しかしなぜLinuxのRaspbian(Raspberry Pi 4)では共有ライブラリ(.soファイル)を利用するとSegmentation faultになるのでしょうか?
|
8
8
|
|
9
|
+
LinuxであればELF形式でアーキテクチャが一致していれば動作すると思っていたのですが、そもそもこの理解が間違っているのでしょうか?
|
10
|
+
|
9
11
|
### 発生している問題・エラーメッセージ
|
10
12
|
```bash
|
11
13
|
$ ./a.out
|
6
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
(Java経由の呼び出しでは無く、実行ファイルから共有ライブラリの関数を呼び出す形です。)
|
5
5
|
|
6
6
|
AndroidもLinuxの一種のはずです。
|
7
|
-
しかしなぜRaspberry Pi 4では共有ライブラリ(.soファイル)を利用するとSegmentation faultになるのでしょうか?
|
7
|
+
しかしなぜLinuxのRaspbian(Raspberry Pi 4)では共有ライブラリ(.soファイル)を利用するとSegmentation faultになるのでしょうか?
|
8
8
|
|
9
9
|
### 発生している問題・エラーメッセージ
|
10
10
|
```bash
|
5
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
```
|
15
15
|
|
16
16
|
### libhelloworld.soのソースコード
|
17
|
-
-
|
17
|
+
- jni/Android.mk
|
18
18
|
```Makefile
|
19
19
|
LOCAL_PATH := $(call my-dir)
|
20
20
|
|
4
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -46,7 +46,7 @@
|
|
46
46
|
|
47
47
|
### 実行ファイル(a.out)のソースコード
|
48
48
|
```c
|
49
|
-
// AndroidOS用はndk-buildで
|
49
|
+
// AndroidOS用はndk-buildでコンパイルした。
|
50
50
|
// Raspberry Pi用は以下コマンドでコンパイルした。
|
51
51
|
// gcc main.c -ldl
|
52
52
|
#include <stdio.h>
|
3
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -76,7 +76,7 @@
|
|
76
76
|
Android, LinuxどちらもARM32環境で一致しています。
|
77
77
|
|
78
78
|
### 補足情報(FW/ツールのバージョンなど)
|
79
|
-
-
|
79
|
+
- OnePlus One(ARM32)(Android 9)
|
80
80
|
- Raspberry Pi 4 Model B(ARM32)(Raspbian GNU/Linux 10 (buster))
|
81
81
|
|
82
82
|
```cmd
|
2
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -46,7 +46,9 @@
|
|
46
46
|
|
47
47
|
### 実行ファイル(a.out)のソースコード
|
48
48
|
```c
|
49
|
+
// AndroidOS用はndk-buildでビルドした。
|
50
|
+
// Raspberry Pi用は以下コマンドでコンパイルした。
|
49
|
-
// gcc main.c -ldl
|
51
|
+
// gcc main.c -ldl
|
50
52
|
#include <stdio.h>
|
51
53
|
#include <dlfcn.h>
|
52
54
|
|
1
修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
(Java経由の呼び出しでは無く、実行ファイルから共有ライブラリの関数を呼び出す形です。)
|
5
5
|
|
6
6
|
AndroidもLinuxの一種のはずです。
|
7
|
-
しかしなぜ
|
7
|
+
しかしなぜRaspberry Pi 4では共有ライブラリ(.soファイル)を利用するとSegmentation faultになるのでしょうか?
|
8
8
|
|
9
9
|
### 発生している問題・エラーメッセージ
|
10
10
|
```bash
|
@@ -75,7 +75,7 @@
|
|
75
75
|
|
76
76
|
### 補足情報(FW/ツールのバージョンなど)
|
77
77
|
- Android OnePlus One(ARM32)
|
78
|
-
- Raspberry Pi 4 Model B(ARM32)(
|
78
|
+
- Raspberry Pi 4 Model B(ARM32)(Raspbian GNU/Linux 10 (buster))
|
79
79
|
|
80
80
|
```cmd
|
81
81
|
$ ndk-build -version
|