Hi David,

For the stubs-32.h thing.. typically on Debian you would need libc6-i386,
but that isn't available for 64-bit TinyCore.

For Alpine Linux, you should know that it uses musl not libc, so the
PicoLisp binary will NOT run on TinyCore if you build it on Alpine (unless
you have musl.so on Debian..ugh?). To compile/link on Alpine with musl,
similarly to TinyCore, you'll need to use the 64-bit OS (it exists) for the
64-bit binary, and the 32-bit OS for the 32-bit binary.

Anyways for musl (Alpine Linux), just add '-nopie' option to the build
options in src64/Makefile, ex:

    LD-MAIN = -Wl,--no-as-needed -rdynamic -lc -lm -ldl -nopie

That's literally all I changed to compile picoLisp 64-bit on Alpine Linux
64-bit. Probably the same option for 32-bit.. let me know ;)

Good luck!

*https://aw.github.io/picolisp <https://aw.github.io/picolisp>*

On Sun, Dec 11, 2016 at 5:41 PM, David Bloom <ipro...@gmail.com> wrote:

> Hello list.  I should have come here sooner looking for someone with more
> C compiling experience than I have.  I used to compile picoLisp in a
> Tinycore linux container with ease following these steps:
> - tce-load compiletc  (this adds gcc, make, etc. so we can compile)
> - copy picolisp source tarball into container
> - compile PicoLisp
> - remove build files
> - tce-audit builddb
> - tce-audit delete compiletc
> A Dockerfile would then copy in the pre-compiled picolisp, add appropriate
> links for global installation resulting in a tidy, small image.
> For some time now, following the same process I get this:
> /tmp/picoLisp/src $ cd ../src64/
> /tmp/picoLisp/src64 $ make
> ./mkAsm x86-64 ".linux" .s Linux base "" ../lib/map  version.l glob.l
> main.l gc.l apply.l flow.l sym.l subr.l big.l io.l db.l net.l err.l
> sys/x86-64.linux.code.l
> ../ersatz/pil: exec: line 5: java: not found
> Makefile:159: recipe for target 'x86-64.linux.base.s' failed
> make: *** [x86-64.linux.base.s] Error 2
> And this....
> /tmp $ cd picoLisp/src
> /tmp/picoLisp/src $ make
> gcc -c -O2 -pipe -falign-functions=32 -fomit-frame-pointer
> -fno-strict-aliasing -W -Wimplicit -Wreturn-type -Wunused -Wformat
> -Wuninitialized -Wstrict-prototypes -D_GNU_SOURCE  -D_FILE_OFFS
> ET_BITS=64 -m32 -D_OS='"Linux"' main.c
> In file included from /usr/include/features.h:389:0,
>                 from /usr/include/stdio.h:27,
>                 from pico.h:5,
>                 from main.c:5:
> /usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file
> or directory
> compilation terminated.
> Makefile:129: recipe for target 'main.o' failed
> make: *** [main.o] Error 1
> /tmp/picoLisp/src $
> A cursory search led to missing 32-bit libraries in the 64-bit Tinycore
> image.  No big deal, what if I tried in a Alpine linux container (only
> 32-bit but small and gaining popularity) similarly:
> https://jpst.it/QgPQ (Using a paste service due to verbose output)
> picolisp compiles easily on Netrunner (based on Manjaro based on Arch)
> which I'm typing this from.  Any C gurus that can make more sense of this
> is greatly appreciated.  Thanks for reading my short novel and any pointers.
> -David

Reply via email to