I think the problem is missing flags and parameters when fuilding a static extension. I'm afraid I don't know exactly what they are, but hopefully I can give some pointers to how you can find them.
chicken-install will extensions first as a shared object, and then as a static one by default.
~/p/t/chicken-mtest > cat mymod.egg
((components
(extension mymod)))
~/p/t/chicken-mtest > chicken-install -v
....
/data/data/com.termux/files/home/prj/tmp/chicken-mtest/mymod.link -host -D compiling-extension -c -unit mymod -D compiling-static-extension -C -I/data/data/com.termux/files/home/prj/tmp/chicken-mtest -O2 -d1 mymod.scm -o
/data/data/com.termux/files/home/prj/tmp/chicken-mtest/mymod.static.o
....
That gives a lot of output, but notice it installs a mymod.o file that trymod can use when compiled statically. Let's see how trymod behaves as normally:
~/p/t/chicken-mtest > csc trymod.scm
~/p/t/chicken-mtest > strace ./trymod ^&1 |grep mymod
newfstatat(AT_FDCWD, "/data/data/com.termux/files/usr/lib/chicken/11/mymod.so", {st_mode=S_IFREG|0755, st_size=13232, ...}, 0) = 0 newfstatat(AT_FDCWD, "/data/data/com.termux/files/usr/lib/chicken/11/mymod.so", {st_mode=S_IFREG|0755, st_size=13232, ...}, 0) = 0 openat(AT_FDCWD, "/data/data/com.termux/files/usr/lib/chicken/11/mymod.so", O_RDONLY|O_CLOEXEC) = 3 openat(AT_FDCWD, "/data/data/com.termux/files/usr/lib/chicken/11/mymod.so", O_RDONLY|O_CLOEXEC) = 3 write(1, "Hello, World, I'm in mymod!\n", 28Hello, World, I'm in mymod!
And now with static compilation:
~/p/t/chicken-mtest > csc -static trymod.scm
~/p/t/chicken-mtest > strace ./trymod ^&1 |grep mymod
write(1, "Hello, World, I'm in mymod!\n", 28Hello, World, I'm in mymod!
I hope that is what you're after. Note this uses the installed version of mymod (chicken-status), not the one in PWD. You can inspect the *.build.sh files that chicken-install produces for inspiration, or tweak the .egg-file to suit your needs.
Cheers,
Kris