Hacker News new | ask | show | jobs
by 1718627440 276 days ago
Kefir doesn't seem to work out of the box on my machine. I have glibc (libc6) version 2.31-13+deb11u6 installed. The linker is missing the symbol dl_iterate_phdr. Do I need to set some special flags for it to work?

    ld: /usr/lib/gcc/x86_64-linux-gnu/10//libgcc_eh.a(unwind-dw2-fde-dip.o): in function `_Unwind_Find_FDE':
    (.text+0x203d): undefined reference to `dl_iterate_phdr'
The linker invocation is:

    ld -o a.out -no-pie /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu//crt1.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu//crti.o /usr/lib/gcc/x86_64-linux-gnu/10//crtbegin.o --dynamic-linker /lib64/ld-linux-x86-64.so.2 /tmp/kefir-155672-5mB4xo/object-file.0.UGboRo -l c -L /usr/lib/gcc/x86_64-linux-gnu/10/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/10/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib/x86_64-linux-gnu/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib/../lib/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/10/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../../lib/ -L /lib/x86_64-linux-gnu/10/ -L /lib/x86_64-linux-gnu/ -L /lib/../lib/ -L /usr/lib/x86_64-linux-gnu/10/ -L /usr/lib/x86_64-linux-gnu/ -L /usr/lib/../lib/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../../x86_64-linux-gnu/lib/ -L /usr/lib/gcc/x86_64-linux-gnu/10/../../../ -L /lib/ -L /usr/lib/ -lc -lm --push-state --as-needed -latomic --no-as-needed --pop-state -ldl -lgcc -lgcc_eh /usr/lib/gcc/x86_64-linux-gnu/10//crtend.o /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu//crtn.o
2 comments

Upon researching that, I got some questions.

Why does kefir use the shell to invoke itself?

Why does it look for its library under /usr/local/bin/../lib/tls/x86_64/x86_64/libkefir.so ? Shouldn't it know where its supposed to be from the build configuration? Is it intended, that it access a file after trying to unlink it?

    unlink("/tmp/kefir-154946-hu9HGw")      = -1 EISDIR (Is a directory)
    rmdir("/tmp/kefir-154946-hu9HGw")       = 0
    access("/tmp/kefir-154946-hu9HGw/object-file.0.ivTxnw", F_OK) = -1 ENOENT (No such file or directory)
Kefir build artifact is fully portable and agnostic to installation location. DESTDIR, prefix, etc are simply interpolated into launch script (template is here: https://git.sr.ht/~jprotopopov/kefir/tree/master/item/script...). So, no kefir binary itself does not know or care where it is installed, it gathers the information the environment variables provided by launch script.

The reason is that kefir supports portable builds which could be unpacked anywhere, so these path might even be relative.

Can you provide me with more details of your system configuration? Dockerfile, ideally. Please send me an email.