我在具有Oracle 12C设置的Red Hat Enterprise Linux Server 6.0版(圣地亚哥)上编译了Proc * C代码。运行良好。当我将相同的可执行文件迁移到安装了Oracle 11G的另一台服务器上时,出现此问题“ libclntsh.so.12.1:无法打开共享对象文件”。我已经在.bash_profile中正确导出了ORACLE_HOME和LD_LIBRARY_PATH。
在运行ldd命令时,我得到- libclntsh.so.12.1 =>找不到
我的exe的makefile编译是:
gcc -o libexceptiondal.so-共享-Wl /oradata1/JSEDev/Application/Source/Dal/Objects/Abc.o -L。 -L / usr / lib64 -lstdc ++ -L / oracle / ora12cu / app / ora12cu / product / 12.1.0 / dbhome_1 / lib -lclntsh -L / oradata1 / JSEDev / Application / Lib -lLog4Cpp2
现在任何人都可以告诉我为什么exe在编译时会寻找libclntsh.so.12.1,但我从未提到libclntsh.so库的版本。 如何使exe oracle版本独立。 任何人都可以对此有所了解。
答案 0 :(得分:0)
您看过libclntsh.so
吗?是a symlink to the specific version。
使用Oracle 12c或11g客户端库时,需要在运行可执行文件的任何系统上都存在这些库。如果要动态链接,则需要复制客户端库-大多数人只是在所有计算机上安装相同的Oracle客户端版本。
可能您想将Oracle 12c客户端库静态链接到您的应用程序中?我从未尝试过; it's apparently tedious but possible。