[General Questions and Answers] zardaxt91:
Dear Community

I have a dynamic linked library (.so file) that I found in a apk. Now I want to be able to load this library on my raspberry pi that is also ARM architecture (like most android devices), with the debian derivative os raspian. Unfortunately I cannot load the library. When I try to do so and strace the attempt, I get the following output:

root@raspberrypi:/home/pi# strace ./test -s libfoo.so
execve("./test", ["./test", "-s", "libfoo.so"], [/* 19 vars */]) = 0
brk(0) = 0x36f000
uname({sys="Linux", node="raspberrypi", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f6a000
access("/etc/ld.so.preload", R_OK) = 0
open("/etc/ld.so.preload", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=44, ...}) = 0
mmap2(NULL, 44, PROT_READ|PROT_WRITE, MAP_PRIVATE, 3, 0) = 0xb6f69000
close(3) = 0
open("/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\270\4\0\0004\0\0\0"..., 512) = 512
lseek(3, 7276, SEEK_SET) = 7276
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
lseek(3, 7001, SEEK_SET) = 7001
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=10170, ...}) = 0
mmap2(NULL, 39740, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f3e000
mprotect(0xb6f40000, 28672, PROT_NONE) = 0
mmap2(0xb6f47000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f47000
close(3) = 0
munmap(0xb6f69000, 44) = 0
open("/usr/lib/tls/v6l/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/v6l/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/v6l/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/v6l", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/v6l/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/v6l/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/v6l/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/v6l", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/vfp/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/vfp", 0xbea66f20) = -1 ENOENT (No such file or directory)
open("/usr/lib/libdl.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=43090, ...}) = 0
mmap2(NULL, 43090, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f33000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libdl.so.2", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0(\t\0\0004\0\0\0"..., 512) = 512
lseek(3, 8652, SEEK_SET) = 8652
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"..., 1160) = 1160
lseek(3, 8320, SEEK_SET) = 8320
read(3, "A0\0\0\0aeabi\0\1&\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 49) = 49
fstat64(3, {st_mode=S_IFREG|0644, st_size=9812, ...}) = 0
mmap2(NULL, 41136, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6f28000
mprotect(0xb6f2a000, 28672, PROT_NONE) = 0
mmap2(0xb6f31000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1) = 0xb6f31000
close(3) = 0
open("/usr/lib/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\214y\1\0004\0\0\0"..., 512) = 512
lseek(3, 1198880, SEEK_SET) = 1198880
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"..., 1360) = 1360
lseek(3, 1198444, SEEK_SET) = 1198444
read(3, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
fstat64(3, {st_mode=S_IFREG|0755, st_size=1200240, ...}) = 0
mmap2(NULL, 1242408, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb6df8000
mprotect(0xb6f1b000, 28672, PROT_NONE) = 0
mmap2(0xb6f22000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x122) = 0xb6f22000
mmap2(0xb6f25000, 9512, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6f25000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f69000
set_tls(0xb6f694c0, 0xb6f69b98, 0xb6f6e048, 0xb6f694c0, 0xb6f6e048) = 0
mprotect(0xb6f22000, 8192, PROT_READ) = 0
mprotect(0xb6f31000, 4096, PROT_READ) = 0
mprotect(0xb6f6d000, 4096, PROT_READ) = 0
munmap(0xb6f33000, 43090) = 0
open("/usr/lib/libfoo.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\v\1\0004\0\0\0"..., 512) = 512
lseek(3, 341440, SEEK_SET) = 341440
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"..., 840) = 840
lseek(3, 341224, SEEK_SET) = 341224
read(3, "A(\0\0\0aeabi\0\1\36\0\0\0\0055TE\0\6\4\10\1\t\1\22\4\24\1\25"..., 41) = 41
close(3) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=43090, ...}) = 0
mmap2(NULL, 43090, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6f33000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/arm-linux-gnueabihf/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/arm-linux-gnueabihf", {st_mode=S_IFDIR|0755, st_size=12288, ...}) = 0
open("/usr/lib/arm-linux-gnueabihf/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/usr/lib/arm-linux-gnueabihf/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/arm-linux-gnueabihf", {st_mode=S_IFDIR|0755, st_size=28672, ...}) = 0
open("/lib/tls/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/tls/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/v6l/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/v6l/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/v6l/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/v6l", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/vfp/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/vfp", 0xbea66f40) = -1 ENOENT (No such file or directory)
open("/lib/libfoo.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/libfoo.so", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0`\v\1\0004\0\0\0"..., 512) = 512
lseek(3, 341440, SEEK_SET) = 341440
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"..., 840) = 840
lseek(3, 341224, SEEK_SET) = 341224
read(3, "A(\0\0\0aeabi\0\1\36\0\0\0\0055TE\0\6\4\10\1\t\1\22\4\24\1\25"..., 41) = 41
close(3) = 0
brk(0) = 0x36f000
brk(0x390000) = 0x390000
munmap(0xb6f33000, 43090) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 1), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb6f68000
write(1, "Service libfoo.so Not Fo"..., 115Service libfoo.so Not Found: libfoo.so: cannot open shared object file: No such file or directory
) = 115
write(1, "Problem calling generic_function"..., 91Problem calling generic_function_entry(): ./test: undefined symbol: generic_function_entry
) = 91
--- SIGSEGV (Segmentation fault) @ 0 (0) ---
+++ killed by SIGSEGV +++
Segmentation fault

I already asked on stack exchange and they suggested to build a chroot with the bionic toolchain:

Any ideas how to start creating such a chroot? I am not really gifted when it comes to such things, especially if there aren't many similar endavours searchable in the net.

Thanks