iODBC icon indicating copy to clipboard operation
iODBC copied to clipboard

FTBFS on macOS11.5 looking for __iodbcdm_loginbox for libdrvproxy.2.dylib

Open nieder opened this issue 4 years ago • 2 comments

On macOS11.5, iODBC-3.52.15 fails to compile with this error (build succeeds on 10.13 and 10.14):

/bin/sh ../libtool  --tag=CC   --mode=link gcc  -g -O2 -DODBCVER=0x0350 -DIODBC_BUILD=15210607 -DNO_FRAMEWORKS -version-info 3:30:1 -export-symbols ./drvproxy.exp -L/opt/sw-11.5/lib/x86_64-darwin -L/opt/sw-11.5/lib -o libdrvproxy.la -rpath /opt/sw-11.5/lib ConfigDSN.lo ConfigDriver.lo Info.lo drvconn.lo -ldl ../iodbcadm/libiodbcadm.la ../drvproxy/gtk/libdrvproxy-gtk.la ../iodbcinst/libiodbc_common.la ../iodbcinst/libiodbcinst.la -L/opt/sw-11.5/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lintl -lfreetype -lfontconfig 
libtool: link: sed 's|^|_|' < ./drvproxy.exp > .libs/libdrvproxy-symbols.expsym
libtool: link: gcc -dynamiclib  -o .libs/libdrvproxy.2.dylib  .libs/ConfigDSN.o .libs/ConfigDriver.o .libs/Info.o .libs/drvconn.o   -Wl,-force_load,../drvproxy/gtk/.libs/libdrvproxy-gtk.a -Wl,-force_load,../iodbcinst/.libs/libiodbc_common.a  -L/opt/sw-11.5/lib/x86_64-darwin -L/opt/sw-11.5/lib ../iodbcadm/.libs/libiodbcadm.dylib /opt/sw-11.5/src/fink.build/libiodbc2-3.52.15-1/iODBC-3.52.15/iodbcinst/.libs/libiodbcinst.dylib /opt/sw-11.5/src/fink.build/libiodbc2-3.52.15-1/iODBC-3.52.15/iodbc/.libs/libiodbc.dylib ../iodbcinst/.libs/libiodbcinst.dylib -ldl /opt/sw-11.5/lib/libgtk-x11-2.0.dylib /opt/sw-11.5/lib/libgdk-x11-2.0.dylib /opt/sw-11.5/lib/libgdk_pixbuf-2.0.dylib /opt/sw-11.5/lib/pango-ft219/lib/libpangocairo-1.0.dylib /opt/sw-11.5/lib/libatk-1.0.dylib /opt/sw-11.5/lib/libcairo.dylib /opt/sw-11.5/lib/libgio-2.0.dylib /opt/sw-11.5/lib/pango-ft219/lib/libpangoft2-1.0.dylib /opt/sw-11.5/lib/pango-ft219/lib/libpango-1.0.dylib /opt/sw-11.5/lib/libgobject-2.0.dylib /opt/sw-11.5/lib/libgmodule-2.0.dylib /opt/sw-11.5/lib/libglib-2.0.dylib /opt/sw-11.5/lib/libintl.dylib /opt/sw-11.5/lib/freetype219/lib/libfreetype.dylib /opt/sw-11.5/lib/fontconfig2/lib/libfontconfig.dylib  -g -O2 -Wl,-dylib_file -Wl,/opt/sw-11.5/lib/libiodbcinst.2.dylib:/opt/sw-11.5/src/fink.build/libiodbc2-3.52.15-1/iODBC-3.52.15/iodbcinst/.libs/libiodbcinst.dylib -Wl,-dylib_file -Wl,/opt/sw-11.5/lib/libiodbc.2.dylib:/opt/sw-11.5/src/fink.build/libiodbc2-3.52.15-1/iODBC-3.52.15/iodbc/.libs/libiodbc.dylib   -pthread -install_name  /opt/sw-11.5/lib/libdrvproxy.2.dylib -compatibility_version 4 -current_version 4.30 -Wl,-single_module -Wl,-exported_symbols_list,.libs/libdrvproxy-symbols.expsym
Undefined symbols for architecture x86_64:
  "__iodbcdm_loginbox", referenced from:
     -exported_symbol[s_list] command line option
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

If I add login.c to libdrvproxy_la_SOURCES in drvproxy/Makefile.am, then the build succeeds.

nieder avatar Jun 13 '21 12:06 nieder

@pkleef @openlink @smalinin -- Please take a look.

TallTed avatar Jun 13 '21 21:06 TallTed

Found out the immediate cause: when using ./autogen.sh to generate ./configure, libtool (v2.4.6) doesn't know about BigSur (macOS11/darwin20) and fails to add the linker flags -Wl,-undefined -Wl,dynamic_lookup. Upstream libtool knows about this but hasn't done anything about it. So that's why linking libdrvproxy.2.dylib fails. But ideally, all symbols in libdrvproxy.2.dylib should be fully resolved by linking in login.o instead of using dynamic lookup.

nieder avatar Aug 24 '21 11:08 nieder