// /etc/odbc.ini(또는 /usr/local/etc/odbc.ini) 에 OracleODBC-11g DSN 이 설정되어 있을경우
// isql 로 oracleodbc 에 접속할 경우 다음과 같이 SQLGetPrivateProfileStringW 를 찾을 수 없다는 에러가 발생한다
isql OracleODBC-11g
isql: symbol lookup error: /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1: undefined symbol: SQLGetPrivateProfileStringW
// 이것은 isql 과 libodbcinst.so 에서 사용하는 libodbcinst.so 의 버전이 달라서 발생한다.
// 다음을 보면 odbcinst 가 libodbcinst.so.2 => /usr/local/lib/libodbcinst.so.2 를 사용하는 것을 알 수 있다.
which odbcinst
/usr/local/bin/odbcinst
ldd /usr/local/bin/odbcinst
libodbcinst.so.2 => /usr/local/lib/libodbcinst.so.2 (0x00002ae12059f000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003f88200000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003f88600000)
libc.so.6 => /lib64/libc.so.6 (0x0000003f87a00000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f87600000)
// 이제 libsqora.so.11.1(oracle odbc 드라이버) 에서 사용하는 odbcinst.so 의 버전을 확인해보면
// libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 를 사용한 것을 알 수 있다
ldd /usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1
ldd: warning: you do not have execution permission for `/usr/lib/oracle/11.2/client64/lib/libsqora.so.11.1'
libdl.so.2 => /lib64/libdl.so.2 (0x00002aad43083000)
libm.so.6 => /lib64/libm.so.6 (0x00002aad43287000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002aad4350a000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00002aad43726000)
libclntsh.so.11.1 => /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 (0x00002aad4393e000)
libodbcinst.so.1 => /usr/lib64/libodbcinst.so.1 (0x00002aad461cf000)
libc.so.6 => /lib64/libc.so.6 (0x00002aad463e3000)
/lib64/ld-linux-x86-64.so.2 (0x0000003f87600000)
libnnz11.so => /usr/lib/oracle/11.2/client64/lib/libnnz11.so (0x00002aad4673a000)
libaio.so.1 => /usr/lib64/libaio.so.1 (0x00002aad46b06000)
// 따라서 libodbcinst.so.1 를 libodbcinst.so.2 으로 사용하도록 변경해 준다.
// 기존 링크는 삭제하고
sudo unlink /usr/lib64/libodbcinst.so.1
// 다음과 같이 libodbcinst.so.2 로 링크 걸어준다
sudo ln -s /usr/lib64/libodbcinst.so.2 /usr/lib64/libodbcinst.so.1