Неустранимая ошибка перемещения libocci.so.11.1 OCIServerAttach, __1c2N6FL_pv_ неопределенные символы

Я пытался скомпилировать драйвер оракула для naviserver (nsoracle). Он компилируется просто отлично, но когда я запускаю сервер, он жалуется во время загрузки модуля 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

1 ответ

Решение

Оказывается, что oracle компилирует свои клиентские библиотеки мгновенного использования, используя SunStudio, используя библиотеки, отсутствующие в дистрибутивах illumos(я запускаю OmniOS) или GNU gcc.

libCrun.so и libCstd.so необходимы для правильной связи InstantClient (в частности, libocci.so.11.1) с nsoracle или другими проектами.

Вы можете использовать источник, такой как команда установки pkg для omnios

   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" 

Вы бы изменили /opt/sunstudio12.1/lib/amd64 на /opt/sunstudio12.1/lib при выполнении 32-битной компиляции.

Другие вопросы по тегам