我正在使用 Makefile 编译我的项目,并且收到以下错误。
[rahul@wbms-dev wdb]$ make
/orasw/app/oracle/product/client_19c/bin/proc INCLUDE=/orasw/app/oracle/product/client_19c/lib INCLUDE=/home/rahul/newest_wbms_code_071521/src/wut INCLUDE=/home/rahul/newest_wbms_code_071521/src/wbr CODE=ANSI_C LTYPE=NONE IRECLEN=256 SQLCHECK=FULL USERID=wbms/myPassword@myProjb iname=OrganizationModelDB.p
/orasw/app/oracle/product/client_19c/bin/proc: error while loading shared libraries: libclntsh.so.19.1: cannot open shared object file: No such file or directory
make: *** [OrganizationModelDB.c] Error 127
我已在 ~/.bashrc 文件中添加了 PATH、LD_LIBRARY_PATH 和 ORACLE_HOME。
PATH=$PATH:/orasw/app/oracle/product/client_19c/bin
LD_LIBRARY_PATH=/orasw/app/oracle/product/client_19c/lib
export ORACLE_HOME=/orasw/app/oracle/product/client_19c
libclntsh.so.19.1 文件也需要 rwx 权限。
[rahul@wbms-dev ~]$ ls -l /orasw/app/oracle/product/client_19c/lib/ | grep 'libclntsh*'
lrwxrwxrwx. 1 oracle mis 21 Jul 1 08:42 libclntshcore.so -> libclntshcore.so.19.1
-rwxrwxrwx. 1 oracle mis 8040704 Jul 1 08:42 libclntshcore.so.19.1
lrwxrwxrwx. 1 oracle mis 17 Jul 1 08:42 libclntsh.so -> libclntsh.so.19.1
lrwxrwxrwx. 1 oracle mis 12 Jul 1 08:42 libclntsh.so.10.1 -> libclntsh.so
lrwxrwxrwx. 1 oracle mis 12 Jul 1 08:42 libclntsh.so.11.1 -> libclntsh.so
lrwxrwxrwx. 1 oracle mis 12 Jul 1 08:42 libclntsh.so.12.1 -> libclntsh.so
lrwxrwxrwx. 1 oracle mis 12 Jul 1 08:42 libclntsh.so.18.1 -> libclntsh.so
-rwxrwxrwx. 1 oracle mis 79942576 Jul 1 08:42 libclntsh.so.19.1
我无法理解错误的含义以及如何解决它。请帮忙。
答案1
问题似乎是LD_LIBRARY_PATH
您在~/.bashrc
文件中设置的 shell 变量永远不会被导出。由于它从未导出,因此链接器不会看到它。
要导出变量(这会从中创建一个环境变量,您启动的其他命令可以看到该变量),请使用以下命令export
:
export LD_LIBRARY_PATH
您还可以在设置变量的同时导出该变量,就像处理ORACLE_HOME
变量一样。事实上,您可以使用您的值编写三行变量赋值,$ORACLE_HOME
如下所示:
export ORACLE_HOME=/orasw/app/oracle/product/client_19c
export LD_LIBRARY_PATH="$ORACLE_HOME/lib"
PATH=$PATH:$ORACLE_HOME/bin
这将减少重复量以及每次更新到较新版本的 Oracle 工具时必须更改值的位置数量。
该PATH
变量不需要导出,因为它已经是一个环境变量。