Связь OCCI: неопределенные символы

Я работал над решением с доступом к базе данных Oracle и C / C ++.
Я использую OCCI, но у нас проблемы с подключением в Solaris 11.
Решение работает «как очарование» в Linux (OpenSUSE и Mint), но не в Solaris 11.

Вот информация об окружающей среде:

  1. Я скачал InstantClient_11_2 (версия Sun Sparc) и распаковал его в папке Solaris
  2. Я создал символические ссылки на libclntsh.so.11.1 с именем libclntsh.so, а для libocci.so.11.1 — с libocci.so. Ниже «ls -l» показывает файлы:

    • -rwxrwxr-x 1 f780333 desenv 23792 22 августа 2013 г. adrci
    • -rw-rw-r— 1 f780333 desenv 414 22 августа 2013 г. BASIC_README
    • -rwxrwxr-x 1 f780333 desenv 41464 22 августа 2013 г., Женези
    • lrwxrwxrwx 1 f780333 desenv 17 апр. 5 14:21 libclntsh.so -> libclntsh.so.11.1
    • -rwxrwxr-x 1 f780333 desenv 50268448 22 августа 2013 г. libclntsh.so.11.1
    • -r-xr-xr-x 1 f780333 desenv 8653320 22 августа 2013 г. libnnz11.so
    • lrwxrwxrwx 1 f780333 desenv 15 апр. 5 14:22 libocci.so -> libocci.so.11.1
    • -rwxrwxr-x 1 f780333 desenv 1545008 22 августа 2013 г. libocci.so.11.1
    • -rwxrwxr-x 1 f780333 desenv 118735824 22 августа 2013 г. libociei.so
    • -r-xr-xr-x 1 f780333 desenv 121800 22 августа 2013 г. libocijdbc11.so
    • -r — r — r— 1 f780333 desenv 2091135 22 августа 2013 г. ojdbc5.jar
    • -r — r — r— 1 f780333 desenv 2739616 22 августа 2013 г. ojdbc6.jar
    • drwxrwxr-x 4 f780333 desenv 7 авг 22 2013 sdk
    • -rwxrwxr-x 1 f780333 desenv 177680 22 августа 2013 г. uidrvci
    • -rw-rw-r— 1 f780333 desenv 66779 22 августа 2013 г. xstreams.jar
  3. Я создал еще одну папку, которая содержит символические ссылки на важные библиотеки потребностей из Solaris. Я связываю проект с параметрами -m64 -lCstd -lrt -lsocket. m64, чтобы заставить 64бит, это было необходимо. Cstd, rt и socket из-за того, что эти библиотеки используются косвенно.

  4. Я использую Netbeans и удаленно компилирую в Solaris 11

Компиляция работает отлично.
Шаблоны команд компиляции показаны ниже:

g ++ -m64 -c -g -I / home / f780333 / paineldaemon / lib / indra_clib / include -I / home / f780333 / paineldaemon / lib / instantclient_11_2 / sdk / include -std = c ++ 98 -MMD -MP -MF «build / Debug / GNU-Solaris-Sparc / main.od» -o build / Debug / GNU-Solaris-Sparc / main.o main.cpp

/ Главная / f780333 / paineldaemon / Библиотека / indra_clib / включить папка со статической библиотекой, используемой программой Эта библиотека моя и нужна для проекта.

/ Главная / f780333 / paineldaemon / Библиотека / instantclient_11_2 / SDK / включить это папка из InstantClient SDK, которая включает в себя * .h из OCCI.

Но когда начинается процесс сцепления, начинается и вся головная боль:

(первая) команда связывания:

g++ -o <all files here> -L/home/f780333/paineldaemon/lib/sun -L/home/f780333/paineldaemon/lib -L/home/f780333/paineldaemon/lib/instantclient_11_2 -R'/home/f780333/paineldaemon/lib/sun' -R'/home/f780333/paineldaemon/lib' -R'/home/f780333/paineldaemon/lib/instantclient_11_2' -lclntsh -locci /home/f780333/paineldaemon/lib/libindra_clib.a -m64 -lCstd -lrt -lsocket

И, наконец, компоновщик СООБЩЕНИЕ ОБ ОШИБКЕ:

Undefined           first referenced
symbol                in file
oracle::occi::Date::~Date()         build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Date::Date()          build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Number::operator=(oracle::occi::Number const&) build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Number::Number(double) build/Debug/GNU-Solaris-Sparc/MessageBuilder.o
oracle::occi::Number::Number(long)  build/Debug/GNU-Solaris-Sparc/MessageBuilder.o
oracle::occi::Number::Number()      build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Number::~Number()     build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned long), void* (*)(void*, void*, unsigned long), void (*)(void*, void*)) build/Debug/GNU-Solaris-Sparc/DatabaseOperation.o
oracle::occi::Date::operator=(oracle::occi::Date const&) build/Debug/GNU-Solaris-Sparc/MessageBuilderATM.o
oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*) build/Debug/GNU-Solaris-Sparc/DatabaseOperation.o
oracle::occi::Date::Date(oracle::occi::Environment const*, int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int) build/Debug/GNU-Solaris-Sparc/MessageBuilder.o
ld: fatal: symbol referencing errors
collect2: error: ld returned 1 exit status
gmake[2]: *** [dist/Debug/GNU-Solaris-Sparc/paineldaemon] Error 1
gmake[2]: Leaving directory `/home/f780333/.netbeans/remote/172.16.160.172/sylvia-Linux-x86_64/home/eduardo/Indra/Cartoes/repo/paineldaemon'
gmake[1]: *** [.build-conf] Error 2
gmake[1]: Leaving directory `/home/f780333/.netbeans/remote/172.16.160.172/sylvia-Linux-x86_64/home/eduardo/Indra/Cartoes/repo/paineldaemon'
gmake: *** [.build-impl] Error 2

Я без ума от этой проблемы, любая помощь будет очень цениться.

0

Решение

По моему опыту, OCCI всегда создавался для Solaris с использованием компилятора Solaris Studio.

Ты не можешь ссылка на сайт исполняемый файл, который использует CC-встроенный код с использованием g++, если вы не можете как-то принуждать g++ связать в обеих библиотеках времени выполнения C ++ libCrun.so а также libCstd.so наряду с правильным кодом запуска C ++, таким же, как в Solaris Studio CC делает. Это, вероятно, не невозможно, но было бы проще просто вызвать ld непосредственно и связать двоичный файл самостоятельно.

И ты не можешь компилировать Исходный код C ++ с g++ чтобы соответствовать схеме искажения имени, используемой Solaris Studio CC, (если код не был построен с более поздней версией CC а также он использовал аргументы командной строки для создания g++совместимость имен, среди многих других требований совместимости, которые по моему опыту OCCI никогда не был …)

Короче говоря, вам нужно использовать Solaris Studio CC компилятор для использования OCCI на Solaris.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]