Closed winspool closed 9 months ago
The failure log is similar, when compiling for 64bit.
With an increased verbosity level, tcc prints more infos during linking, but for "libterminfo.so", the result is always "nf" (not found).
tcc -w -v -v -v -shared -o libpanel/libpanel.so libpanel/_deck.lo libpanel/above.lo libpanel/below.lo libpanel/bottom.lo libpanel/del.lo libpanel/getuser.lo libpanel/hidden.lo libpanel/hide.lo libpanel/move.lo libpanel/new.lo libpanel/replace.lo libpanel/setuser.lo libpanel/show.lo libpanel/top.lo libpanel/update.lo libpanel/window.lo libcurses/libcurses.so -Wl,-soname=libpanel.so
tcc version 0.9.28rc 2023-09-09 mob@7f39b4f (x86_64 Linux)
-> /usr/lib/x86_64-linux-gnu/crti.o
-> libpanel/_deck.lo
-> libpanel/above.lo
-> libpanel/below.lo
-> libpanel/bottom.lo
-> libpanel/del.lo
-> libpanel/getuser.lo
-> libpanel/hidden.lo
-> libpanel/hide.lo
-> libpanel/move.lo
-> libpanel/new.lo
-> libpanel/replace.lo
-> libpanel/setuser.lo
-> libpanel/show.lo
-> libpanel/top.lo
-> libpanel/update.lo
-> libpanel/window.lo
-> libcurses/libcurses.so
nf /usr/lib/x86_64-linux-gnu/tcc/libterminfo.so
nf /usr/lib/x86_64-linux-gnu/libterminfo.so
nf /usr/lib/libterminfo.so
nf /lib/x86_64-linux-gnu/libterminfo.so
nf /lib/libterminfo.so
nf /usr/local/lib/x86_64-linux-gnu/libterminfo.so
nf /usr/local/lib/libterminfo.so
libcurses/libcurses.so: error: referenced dll 'libterminfo.so' not found
make: *** [GNUmakefile:529: libpanel/libpanel.so] Fehler 1
libpanel.so only uses symbols from libcurses.so, which has its full path provided at the linker command line. imo it's a bug that tcc tries to "recurse" into the dependency tree of libcurses.so. gcc doesn't, i often build netbsd curses on a fresh rootfs without any existing libterminfo.so installed. i suppose unless that is fixed you'll run into problems with other packages that use multiple shared libraries. in case tinycc calls out to binutils' ld, the fix could be as easy as passing the right options (same ones that gcc uses).
libpanel.so only uses symbols from libcurses.so, which has its full path provided at the linker command line. imo it's a bug that tcc tries to "recurse" into the dependency tree of libcurses.so. gcc doesn't,
tcc 0.9.28rc was fixed to not load all referenced libraries, when linking a library. https://repo.or.cz/tinycc.git/commit/32c4df1497e887eb77f5663c7b656aad70475325
in case tinycc calls out to binutils' ld, the fix could be as easy as passing the right options (same ones that gcc uses).
tcc is not only a superfast compiler, but includes also common linker and archive functionality.
While testing the new rc of tinycc on linux, the build breaks at libpanel/libpanel.so:
libpanel/libpanel.so depends on libcurses/libcurses.so
libcurses/libcurses.so depends on libterminfo/libterminfo.so
the compiler searches for libterminfo.so, but fails:
This patch adds the missing reference to libterminfo/ during the build to allow the compiler to find libterminfo.so.
When the os has a libterminfo.so already installed in one of the default lib search directories, the bug will never be visible.
This can be verified after a sucessful build, without an installed libterminfo.so: Example:
-- Regards ... Detlef