ITK icon indicating copy to clipboard operation
ITK copied to clipboard

Improve symbol name mangling of zlib and HDF5

Open dzenanz opened this issue 1 year ago • 1 comments

While trying to compile a program which uses both ITK and NetCDF (which in turn depends on HDF5 and zlib), I ran into the following linking errors:

Build started...
1>------ Build started: Project: tester, Configuration: Debug x64 ------
1>itkzlib-5.3.lib(inflate.obj) : error LNK2005: inflate_ensure_window already defined in zlibstaticd.lib(inflate.obj)
1>itkzlib-5.3.lib(inflate.obj) : error LNK2005: fixedtables already defined in zlibstaticd.lib(inflate.obj)
1>itkzlib-5.3.lib(deflate.obj) : error LNK2005: fill_window already defined in zlibstaticd.lib(deflate.obj)
1>itkzlib-5.3.lib(deflate.obj) : error LNK2005: flush_pending already defined in zlibstaticd.lib(deflate.obj)
1>itkzlib-5.3.lib(deflate.obj) : error LNK2005: read_buf already defined in zlibstaticd.lib(deflate.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: z_verbose already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zlibng_string already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: z_error already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zng_calloc already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zng_cfree already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zng_alloc_aligned already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zng_free_aligned already defined in zlibstaticd.lib(zutil.obj)
1>itkzlib-5.3.lib(zutil.obj) : error LNK2005: zlibng_version already defined in zlibstaticd.lib(zutil.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wgettimeofday already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wsetenv already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wflock already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wgetlogin already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: H5_expand_windows_env_vars already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: H5_get_utf16_str already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wopen_utf8 already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: Wremove_utf8 already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: H5_get_win32_times already defined in libhdf5.lib(H5system.obj)
1>itkhdf5-static-5.3_D.lib(H5system.obj) : error LNK2005: HDvasprintf already defined in libhdf5.lib(H5system.obj)
1>itkzlib-5.3.lib(adler32.obj) : error LNK2005: adler32_c already defined in zlibstaticd.lib(adler32.obj)
1>   Creating library C:/Misc/Tester/Debug/tester.lib and object C:/Misc/Tester/Debug/tester.exp
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>C:\Misc\Tester\Debug\tester.exe : fatal error LNK1169: one or more multiply defined symbols found
1>Done building project "tester.vcxproj" -- FAILED.
2>------ Skipped Build: Project: ALL_BUILD, Configuration: Debug x64 ------
2>Project not selected to build for this solution configuration 
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 1 skipped ==========

I am quite convinced this is due to incomplete symbol mangling in zlib-ng and itk_hdf5_mangle.h.

dzenanz avatar Aug 04 '22 20:08 dzenanz

This seems to be partly a duplicate of https://github.com/zlib-ng/zlib-ng/issues/1279.

dzenanz avatar Aug 04 '22 22:08 dzenanz