openlink / iODBC

An open-source ODBC driver manager and SDK that facilitates the development of database-independent applications on linux, freebsd, unix and MacOS X platforms.
http://www.iodbc.org/
Other
162 stars 52 forks source link

libiodbcinst.dylib is missing macOS Big Sur #57

Closed ausiddiqui closed 3 years ago

ausiddiqui commented 3 years ago

When trying to onfigure a driver (Teradata ODBC Driver) using iODBC Administrator I get the warning dialog box with an OK button:

Dynamic Library Error libiodbcinst.dylib is missing.

This is on macOS Big Sur 11.2.3 and I installed OpenLink iODBC Driver Manager v3.52.14 through the dmg file in the release link on GitHub.

There are only two copies of libiodbcinst.dylib on my machine: /usr/local/iODBC/lib -- symbolic link to //Library/Frameworks/iODBCinst.framework/iODBCinst /usr/lib -- this is a broken symbolic link to libiodbcinst.2.1.18.dylib

This second link in /usr/lib cannot be edited, removed and a new link cannot be added in this directory (even with sudo).

I have added /usr/local/iODBC/lib to both my PATH and DYLD_LIBRARY_PATH environment variables without any luck.

TallTed commented 3 years ago

Interesting.

Have (or will) you set up locate on your machine? If so, please provide the output of --

locate -0 libiodbcinst | xargs -0 sudo ls -l

If you haven't (and don't want to) set up locate, please provide output of this command (which will take somewhat longer to run, especially if you have mounted any network volumes) --

sudo find / -name "*libiodbcinst*" -print0 | xargs -0 sudo ls -l
pkleef commented 3 years ago

(simplified answer)

I have downloaded the Teradata driver on my Big Sur system and recreated your error.

It indeed looks like Apple is only installing the symlinks to their build of the libiodbcinst.2.1.18.dylib, but forgot to actually install the library itself in /usr/lib. As this directory cannot be changed by a user (or root for that matter) we cannot directly fix the issue in our installers. We can try to raise a problem report to Apple, but it is unsure how long this may take.

Your idea to change the DYLD_LIBRARY_PATH unfortunately also does not work transparently, unless you set it on some system-wide level. Starting the iODBC Administrator64.app from the UI does not inherit the environment settings from your shell.

As it looks like Teradata is not directly linking to the libiodbcinst.dylib library, but loads the library dynamically when the dialog is instantiated, you should report this problem to them and tell them to contact us. We would be more than happy to work with them to fix this issue for their customers.

So i checked if i could fix the Teradata installation on my system.

First i went to the directory where the setup dialog has been written by looking at my /Library/ODBC/odbcinst.ini which has the following lines:

[Teradata Database ODBC Driver 16.20]
Driver = /Library/Application Support/teradata/client/16.20/lib/tdataodbc_sbu.dylib
Setup  = /Library/Application Support/teradata/client/16.20/lib/TeradataODBCSetup.bundle/Contents/MacOS/TeradataODBCSetup

This problem is actually easier to fix than i originally wrote up.

As you have the iODBC and iODBCinst frameworks installed on your system, the only thing we need to do is create a symlink in one of the search directories that the system uses so it can find the missing library. Since /usr/lib/ is not writeable anymore, the next best thing is to use /usr/local/lib/

Please perform the following commands in a Terminal session:

$ cd /usr/local/lib
$ sudo ln -s /Library/Frameworks/iODBCinst.framework/iODBCinst libiodbcinst.dylib

You should now be able to configure a DSN using the iODBC Administrator64.app

TallTed commented 3 years ago

@ausiddiqui -- Can you confirm whether the above brought you success?

Please also note that new installers of iODBC 3.52.15 have just been posted, which will bring improved experience on macOS Big Sur.

ausiddiqui commented 3 years ago

The symbolic linking @pkleef suggested worked. Thank you!