Oracle 致命的重新定位错误libocci.so.11.1 OCIServerAttach,_1c2N6FL_pv_u未定义的符号

Oracle 致命的重新定位错误libocci.so.11.1 OCIServerAttach,_1c2N6FL_pv_u未定义的符号,oracle,compilation,driver,solaris,omnios,Oracle,Compilation,Driver,Solaris,Omnios,我一直在尝试为naviserver编译oracle驱动程序(oracle)。它编译得很好,但当我启动服务器时,它会在nsoracle.so的模块加载过程中抱怨 Error: modload: /usr/local/ns/bin/nsoracle.so: couldn't load file "/usr/local/ns/bin/nsoracle.so": ld.so.1: nsd: fatal: relocation error: file /usr/local/ns/bin/nsora

我一直在尝试为naviserver编译oracle驱动程序(oracle)。它编译得很好,但当我启动服务器时,它会在nsoracle.so的模块加载过程中抱怨

    Error: modload: /usr/local/ns/bin/nsoracle.so: couldn't load file "/usr/local/ns/bin/nsoracle.so": ld.so.1: nsd: fatal: relocation error: file /usr/local/ns/bin/nsoracle.so: symbol OCIServerDetach: referenced symbol not found
Makefile中的库/链接行如下所示:

    MODLIBS  += -R$(ORACLE_HOME}:${ORACLE_HOME}/lib:$NSHOME/bin:$NSHOME/lib -L$(ORACLE_HOME):$(ORACLE_HOME)/lib:$(NSHOME)/lib -L$(ORACLE_HOME):$(ORACLE_HOME)/lib:$(NSHOME)/lib  -locci -lclntsh -lnnz11

ORACLE_HOME包含libocci.so.11.1 libclntsh.11.1 libociei.so libnnz11.so lib

,因为ORACLE使用illumos(我运行OmniOS)或GNU gcc发行版中不存在的库,使用SunStudio编译其即时客户端库

libCrun.so和libCstd.so需要正确链接instantclient(特别是libocci.so.11.1)与Sensoracle或其他项目

您可以使用类似于用于omnios的pkg install命令的源代码

   pkg install sunstudio12.1
另外,请检查获取Sun Studio的其他选项

我最终使用的gmake命令对我有效:

   gmake MODLIBS+="-L/opt/sunstudio12.1/lib/amd64 -L$ORACLE_HOME/lib -L/usr/local/ns/lib -R/opt/sunstudio12.1/lib/amd64 -R$ORACLE_HOME/lib  -R/usr/local/ns/lib -lCrun -lCstd -locci -lclntsh -lociei -lnnz11 -lnsthread -lnsdb -lnsd -ltcl8.5" 

如果执行32位编译,您将/opt/sunstudio12.1/lib/amd64更改为/opt/sunstudio12.1/lib。

不要期望能够将该库链接到使用GCC编译的程序中并使其工作。到目前为止,我的服务器已经能够正确地连接到以前无法连接的oracle数据库。有什么值得担心的吗。我的第一次尝试我确实尝试使用sun的cc,但makefile忽略了它并正确链接,如果有充分的理由,我肯定愿意返回并使用sun cc重新编译。