你能帮我看看这里少了什么吗?
我试图编译一个c++程序使用OTL 4库,但我得到一个错误。
环境详细信息:
- 我在Ubuntu 11.04虚拟机上安装了Oracle DB XE 10G。
- SQL*Plus和服务器本身正在正常运行。
编译代码为:
g++ -o <output>.exe <source>.cpp -I$ORACLE_HOME/rdbms/public -I$ORACLE_HOME/rdbms/demo -L$ORACLE_HOME/lib -lclntsh
错误是:
/usr/bin/ld: warning: libnnz10.so, needed by /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so, not found (try using -rpath or -rpath-link)
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nztSetAppDefaultLocation'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nzos_DisableClientAuthentication'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nzos_Create_Ctx'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `_intel_fast_memcpy'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nzgbllsm_location_shared_memory'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `__intel_cpu_indicator'
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nzosSCCS_SetCRLCacheSize'
...a whole lot more undefined references...
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib/libclntsh.so: undefined reference to `nzssGSL_GetSecretLength'
collect2: ld returned 1 exit status
错误说明:
当我查看$ORACLE_HOME/lib
目录时,发现libnnz10.so
存在。
今天下午我把它弄明白了,现在我把它编译好了。
因此,如果有人遇到和我一样的问题,这里有解决方案:
将$ORACLE_HOME/lib
路径添加到$LD_LIBRARY_PATH
为方便起见,您也可以将其添加到.bashrc
配置文件中,如下所示:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH
就是这样!
PS:
我想早些时候发布这个,但似乎我仍然缺乏rep点
为了在8小时内回答我自己的问题。
不知道为什么有必要,但是您可以尝试将-lnnz10
添加到命令中。
(谷歌显示人们使用了这个额外的参数,但不能很快看到有人解释为什么;其他选项似乎是设置LD_LIBRARY
路径或将$ORACLE_HOME/lib
添加到/etc/ld.so.conf
…)