我一直在尝试为naviserver(nsoracle)编译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
答案 0 :(得分:1)
事实证明,oracle使用SunStudio使用不存在于illumos(我运行OmniOS)或GNU gcc发行版中的库来编译它的即时客户端库。
libCrun.so和libCstd.so需要将instantclient(特别是libocci.so.11.1)与nsoracle或其他项目正确链接。
您可以使用类似pkg install命令的源代码来实现omnios
pkg install sunstudio12.1
另请查看here以获取获取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。