2015.06.16 14:39 "[Tiff] CMake support for building libtiff", by Roger Leigh

2015.06.23 09:22 "Re: [Tiff] 4.0.4beta: Symbol differences on Unix and Windows", by Ondřej Surý

On Fri, Jun 19, 2015, at 00:15, Bob Friesenhahn wrote:

Looking over the exported symbols between Unix (FreeBSD/ELF with nm -D) and Windows (the libtiff.def list), there are a lot of missing symbols on Windows. I've attached a list showing which are missing. Would it be possible to update the symbol list for 4.0.4? Some symbols are likely not supposed to be exported on Unix (expecially those without a TIFF or _TIFF prefix) and should probably be ignored.

Linux/FreeBSD/ELF exports all non-static symbols by default and this is usually unwanted. In this case, Windows is ahead of default ELF linkage.

Wait, what? You can either use GCC Visibility[1] or linker version script that are already in use for GNU ld in libtiff/Makefile.am. It's just the libtiff.map that's broken, since it exports all symbols by default since it contains instructions to export all symbols:

$ cat libtiff/libtiff.map
LIBTIFF_4.0 {
  global:
    *;
};
$ cat libtiff/libtiffxx.map
LIBTIFFXX_4.0 {
  global:
    *;
};

So it's just a matter of syncing the libtiff.def with libtiff.map file (probably by generating libtiff.map from libtiff.def).

1. https://gcc.gnu.org/wiki/Visibility
--
Ondřej Surý <ondrej@sury.org>

Knot DNS (https://www.knot-dns.cz/) – a high-performance DNS server