一台机器上安装了64位的oracle10,使用OCI开发一个程序,这个程序会依赖$OracleHome/lib32/libclntsh.so.10.1。注意,由于安装的是64位的客户端,所以$OracleHome下存在lib32和lib两个库。程序是32位的,所以去链接lib32下的文件。代码如下:OCIEnv      *m_pEnvHandle;
OCIError    *m_pErrHandle;
OCIServer   *m_pSrvHandle;
OCISvcCtx   *m_pSvcHandle; const char* i_pszSrv = "myDb";OCIEnvCreate(&m_pEnvHandle, OCI_THREADED|OCI_OBJECT, (dvoid *)0,
0, 0, 0, (size_t) 0, (dvoid **)0);
OCIHandleAlloc((dvoid*)m_pEnvHandle, (dvoid**)&m_pErrHandle,
OCI_HTYPE_ERROR, (size_t)0, (dvoid**)0);
OCIHandleAlloc((dvoid*)m_pEnvHandle, (dvoid**)&m_pSrvHandle,
OCI_HTYPE_SERVER, (size_t)0, (dvoid**)0);
OCIServerAttach(m_pSrvHandle, m_pErrHandle, (text*)i_pszSrv, strlen((char*)i_pszSrv), OCI_DEFAULT);
......当使用64位客户端lib32/libclntsh.so.10.1时,程序执行到OCIServerAttach()会CoreDump,从一个32位的oracle客户端库中拷贝一个libclntsh.so.10.1,替换掉64位lib32/libclntsh.so.10.1,代码就可以正常运行。
这是为什么?网上也没查到libclntsh.so.10.1做了什么特殊的改动。