Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Соединение c++ программы с Oracle с помощью OCCI библиотеки / 15 сообщений из 15, страница 1 из 1
03.04.2019, 13:31
    #39795788
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
Добрый день.

Пытаюсь подключиться из крестов к ораклу (12.1 версия).
Использую либу OCCI из ораклиного дистрибутива (oracle\product\12.1.0\client_1\oci\lib\msvc).

Работаю из под винды 10 + компилятор mingw64.

Есть следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <occi.h> 

void oracle_connect()
{
    using namespace oracle::occi;       
    using namespace std;
    Environment *env;              
    Connection *conn;              
    Statement *stmt;               
    env = Environment::createEnvironment (Environment::DEFAULT);
    conn = env->createConnection ("dasdas", "dasdas", "dasdas");
}

int main()
{
    oracle_connect();
}



Компилирую строкой:
g++ test.cpp -loci -lociw32 -loraocci12

Получаю ошибку:
undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'


Необходимые библиотеки (oraocci12.lib ociw32.lib oci.lib) компилятор видит.
Мне подсказали на stackoverflow, что возможно проблема в том, что библиотеки скомпилированы с отличным ABI, который есть в используемом мною компиляторе и рекомендовали попробовать запуститься из VS.

Вопрос - кто-нибудь сталкивался с этой проблемой? Есть какие-нибудь решения, чтобы все это взлетело на mingw64?
...
Рейтинг: 0 / 0
03.04.2019, 14:04
    #39795814
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
Мой совет: не выпендривайся с OCCI, используй OCI.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.04.2019, 15:16
    #39795871
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
Dimitry Sibiryakov,

только что накатил visual studio ради интереса. occi нормально завелась и работает - линковка нормально отрабатывает...
а с mingw проблема.
...
Рейтинг: 0 / 0
03.04.2019, 15:48
    #39795895
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishereDimitry Sibiryakov,

только что накатил visual studio ради интереса. occi нормально завелась и работает - линковка нормально отрабатывает...
а с mingw проблема.
Возможно, потому что это плюсовые библиотеки. Следовательно, там задействован манглинг имён.
У MinGW манглинг имён как у GCC и Clang, у MSVS совсем другой манглинг. В этом плане ты не сможешь скормить плюсовые либы
одного тулчейна другому.
...
Рейтинг: 0 / 0
03.04.2019, 15:53
    #39795897
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
NekZ,

классно сделали. типа вот вам либы, но юзать их можете только под определенный компилятор так что ли получается?
...
Рейтинг: 0 / 0
03.04.2019, 15:55
    #39795898
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishere,

сказали же, ABI у них несовместимы
в дефолте VS вообще ThisCall под 32-бита использует, и фиг к нему из других компиляторов достучишься без ассемблерных вставок
самое смешное, что они и между версиями студии несовместимы бывают :-). так что ищи и студию из под которой всё это собиралось

падает уровень разработчиков, падает ..., надо быть альтернативно одарённым, что бы в либе для общего пользования объекты выставить
...
Рейтинг: 0 / 0
03.04.2019, 16:00
    #39795900
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
kealon(Ruslan),

см. выше - нашел уже.

Вопрос в том, как вообще народ для mingw это запускает.

Ладно я для себя балуюсь, а если задача для крупного проекта - что весь проект на VS мигрировать из-за такой лажи?)
...
Рейтинг: 0 / 0
03.04.2019, 16:06
    #39795903
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishere,

В C++20, вроде, шли разговоры о portable ABI. Это же дело такое, сам понимаешь, кропотливое и затянутое.
Используй сишный OCI и не будет проблем вообще.
...
Рейтинг: 0 / 0
03.04.2019, 16:08
    #39795905
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishereЛадно я для себя балуюсь, а если задача для крупного проекта - что весь проект на VS мигрировать из-за такой лажи?)делаешь на студии dll-ку с нормальными интерфейсами и её уже юзаешь из своего проекта

например тупо оборачиваешь

Код: plaintext
1.
2.
3.
4.
void __stdcall CallMet1(CObj1* a, ...  )
{
  a->Met1(...);
}



макрос наверное можно написать, что бы не строчить каждый раз
...
Рейтинг: 0 / 0
03.04.2019, 16:12
    #39795907
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishereNekZ,

классно сделали. типа вот вам либы, но юзать их можете только под определенный компилятор так что ли получается?

Так, так. И так всегда и было.
...
Рейтинг: 0 / 0
03.04.2019, 16:12
    #39795908
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
nobodyishere,

я так понимаю что "сишный OCI", о котором пишет NekZ как раз и есть такой вариант
...
Рейтинг: 0 / 0
03.04.2019, 16:39
    #39795920
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
kealon(Ruslan)nobodyishereЛадно я для себя балуюсь, а если задача для крупного проекта - что весь проект на VS мигрировать из-за такой лажи?)делаешь на студии dll-ку с нормальными интерфейсами и её уже юзаешь из своего проекта

например тупо оборачиваешь

Код: plaintext
1.
2.
3.
4.
void __stdcall CallMet1(CObj1* a, ...  )
{
  a->Met1(...);
}



макрос наверное можно написать, что бы не строчить каждый раз
И так от макроса, к метапрограммированию. А потом динамическая диспетчеризация, и парень изобретает ещё один COM
...
Рейтинг: 0 / 0
03.04.2019, 17:18
    #39795941
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
всем спасибо)
...
Рейтинг: 0 / 0
03.04.2019, 17:45
    #39795957
nobodyishere
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
Ну да, oci компильнулся нормально.
...
Рейтинг: 0 / 0
03.04.2019, 19:41
    #39795990
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Соединение c++ программы с Oracle с помощью OCCI библиотеки
NekZИ так от макроса, к метапрограммированию. А потом динамическая диспетчеризация, и парень изобретает ещё один COM кодогенерация рулит, pdb-ки достаточно, что бы заголовков нагенерить
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Соединение c++ программы с Oracle с помощью OCCI библиотеки / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]