> Date: Sun, 25 Oct 2026 14:28:52 +0100
> From: Patrice Dumas <[email protected]>
> 
> Hello,
> 
> I have been testing the CI with --disable-perl-xs and
> --enable-additional-checks, which leads to a C-only build (no Perl
> flags, no Perl XS) as long as the dependencies are there (mainly iconv).
> In this setup, the tta/C shared libraries are built (though they are not
> used by anything), and the texistatic executable is built too (no Perl
> headers used, no link to Perl, no call to Perl, statically linked).
> ctexi2any is not built in this setup.
> 
> It fails on the Cygwin 32 platform when linking libtexinfo-convert with
> many undefined references errors to symbols that are supposed to be in
> libtexinfo.dll.  (As a side note, the Cygwin 32 distribution is
> unmaintained.)
> 
> Comparing with the flags present with Perl, the following link flags are
> in Perl flags and could explain why it does not fail when Perl flags are
> used:
>  -Wl,--enable-auto-import -Wl,--export-all-symbols
> but it could be something else.
> 
> 
> The link command and an example of failures (there are many more):
> 
> 2026-10-25T10:38:56.1347576Z libtool: link: gcc -shared  
> convert/.libs/libtexinfo_convert_la-converter.o 
> convert/.libs/libtexinfo_convert_la-convert_indices.o 
> convert/.libs/libtexinfo_convert_la-cmd_converter.o 
> convert/.libs/libtexinfo_convert_la-converters_options.o 
> convert/.libs/libtexinfo_convert_la-convert_to_plaintext.o 
> convert/.libs/libtexinfo_convert_la-convert_to_info.o 
> convert/.libs/libtexinfo_convert_la-convert_html.o 
> convert/.libs/libtexinfo_convert_la-format_html.o 
> convert/.libs/libtexinfo_convert_la-html_converter_init_options.o 
> convert/.libs/libtexinfo_convert_la-html_converter_finish.o 
> convert/.libs/libtexinfo_convert_la-html_conversion_state.o 
> convert/.libs/libtexinfo_convert_la-html_prepare_converter.o 
> convert/.libs/libtexinfo_convert_la-html_converter_api.o 
> convert/.libs/libtexinfo_convert_la-plaintexinfo_converter_api.o 
> convert/.libs/libtexinfo_convert_la-plaintext_paragraph.o 
> convert/.libs/libtexinfo_convert_la-rawtext_converter_api.o  
> -Wl,--whole-archive ./.libs/libcallperl_libtexinfo_convert.a 
> -Wl,--no-whole-archive  ./.libs/libtexinfo.dll.a 
> /cygdrive/d/a/ci-check/ci-check/texinfo-7.3.20261025dev/build/tta/C/.libs/libtexinfo.dll.a
>  -liconv -lintl  -g -O2   -o .libs/cygtexinfo-convert-1.dll 
> -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker 
> .libs/libtexinfo-convert.dll.a
> 2026-10-25T10:38:56.1348171Z 
> /usr/lib/gcc/i686-pc-cygwin/11/../../../../i686-pc-cygwin/bin/ld: 
> convert/.libs/libtexinfo_convert_la-converter.o: in function 
> `free_output_unit_files_file':
> 2026-10-25T10:38:56.1348562Z 
> /cygdrive/d/a/ci-check/ci-check/texinfo-7.3.20261025dev/build/tta/C/../../../tta/C/convert/converter.c:2345:
>  undefined reference to `rpl_free'
> ...
> 2026-10-25T10:38:56.1351041Z 
> /cygdrive/d/a/ci-check/ci-check/texinfo-7.3.20261025dev/build/tta/C/../../../tta/C/convert/converter.c:2202:
>  undefined reference to `fatal'

This link command is supposed to produce the shared library
.libs/cygtexinfo-convert-1.dll, right?

The link command line mentions .libs/libtexinfo.dll.a several times.
This is an import library, which is supposed to tell the linker in
which DLL to find each function it needs.  If you run "nm -A" on
.libs/libtexinfo.dll.a, do you see there entries for the functions
that the linker complains as unresolved?  For example, if I look at
.libs/libtexinfo.dll.a which was built with MinGW from Texinfo 7.3, I
see this for rpl_free:

  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000775.o:         U 
__head_libtexinfo_1_dll
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000775.o:00000000 I 
__imp__rpl_free
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000775.o:00000000 T _rpl_free
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000774.o:00000000 i .idata$4
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000774.o:00000000 i .idata$5
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000774.o:00000000 i .idata$6
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000774.o:00000000 i .idata$7
  /tta/C/.libs/libtexinfo.dll.a:libtexinfo_1_dll_d000774.o:00000000 t .text

The meaning of symbols U, I, T, etc. is explained in the GNU Binutils
manual, in the node "nm".  The important parts above are the
__imp__rpl_free one and the _rpl_free one.

Do you see something similar in tre .dll.a file in your tree?

Caveat: I know very little about Cygwin, I just think that the
requirements for DLLs and their import libraries are the same as for
MinGW, because they are mandated by the PE binary format used by
Windows.

HTH

Reply via email to