0

我只是在做一些简单的 OCCI 事情,但是编译起来有点奇怪

环境:

  • Oracle VM:Windows 8 64 位上的 Centos7 64 位
  • gcc-c++.x86_64
  • 只需双击 rpm 即可安装 Oracle XE(下载页面显示 linux 64bit)

echo $LD_LIBRARY_PATH 产生: /usr/local/lib64/:/u01/app/oracle/product/11.2.0/xe/lib/

我也试过export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/xe/lib/ 让它产生 /u01/app/oracle/product/11.2.0/xe/lib/

一些列表命令: find /u01/app/oracle/product/11.2.0/xe/lib/ -name lib*

产生以下结果:

/u01/app/oracle/product/11.2.0/xe/lib/
/u01/app/oracle/product/11.2.0/xe/lib/libagtsh.so.1.0
/u01/app/oracle/product/11.2.0/xe/lib/libcell11.so
/u01/app/oracle/product/11.2.0/xe/lib/libclntsh.so.11.1
/u01/app/oracle/product/11.2.0/xe/lib/libnnz11.so
/u01/app/oracle/product/11.2.0/xe/lib/libocci.so.11.1
/u01/app/oracle/product/11.2.0/xe/lib/libclntsh.so
/u01/app/oracle/product/11.2.0/xe/lib/libocci.so
/u01/app/oracle/product/11.2.0/xe/lib/libagtsh.so
and some others....

但是编译命令说 ld 找不到一些库: g++ -o ab -I/u01/app/oracle/product/11.2.0/xe/rdbms/public/ -lnnz11 -lclntsh -locci a.cpp

/usr/bin/ld: cannot find -lnnz11
/usr/bin/ld: cannot find -lclntsh
/usr/bin/ld: cannot find -locci
collect2: error: ld returned 1 exit status

我已经尝试添加-L/u01/app/oracle/product/11.2.0/xe/lib/,它成功编译但是运行程序会导致它在简单的行中静默崩溃/阻塞

Environment *env = Environment::createEnvironment();

没有发现异常。

有人知道我做错了什么吗?还是这两个问题相关?

顺便说一句,它曾经像 5 小时前一样工作,当它突然停止工作时,我重新安装了整个 VM,现在它仍然无法工作。

4

1 回答 1

0

但是编译命令说 ld 找不到一些库:g++ -o ab -I/u01/app/oracle/product/11.2.0/xe/rdbms/public/ -lnnz11 -lclntsh -locci a.cpp

您的命令不正确(链接器抱怨是正确的)。您需要告诉链接器在哪里可以找到库,并使用-L标志来执行此操作:

ORACLE=/u01/app/oracle/product/11.2.0/xe
g++ -I ${ORACLE}/rdbms/public -L ${ORACLE}/lib a.cpp -lnnz11 -lclntsh -locci

(请注意,您在库之后放置源代码也是不正确的,我在上面修复了它。在链接命令行上放置库和源代码很重要。)

于 2016-08-21T00:22:34.940 回答