C++
編譯時如何解決共享庫文件錯誤
我正在使用 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
我無法理解錯誤是關於什麼以及如何解決它。請幫忙。
問題似乎是
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
變數不需要導出,因為它已經是一個環境變數。