Подключение программы C++ к Oracle с использованием библиотеки occi

Я пытаюсь подключить свою программу на C++ к базе данных Oracle (12.1).

Моя программа на С++ на данный момент (я использую компилятор mingw64 g++ в Windows):

#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

Все эти библиотеки (oraocci12.lib ociw32.lib oci.lib) находятся в моей папке оракула: oracle\product\12.1.0\client_1\oci\lib\msvc

Но я получил ошибку во время компиляции:

undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'

Как мне правильно связать мою программу, чтобы успешно скомпилировать ее?


person Eugene    schedule 01.04.2019    source источник
comment
Пробовали ли вы также добавить -L (что-то вроде -Ld:\oracle\product\12.1.0\client_1\oci\lib\msvc)   -  person Gojita    schedule 01.04.2019
comment
@Gojita Я попробовал сейчас g++ test.cpp -LC:\oracle\product\12.1.0\client_1\oci\lib\msvc -loci -lociw32 -loraocci12 - та же ошибка.   -  person Eugene    schedule 01.04.2019
comment
Попробуйте найти в своем каталоге библиотеку, в которой определяется функция. убедитесь также, что библиотека оракула скомпилирована с версией ABI, идентичной используемой вами g++. Какую версию g++ вы используете?   -  person Gojita    schedule 01.04.2019
comment
@Gojita, версия g++ 8.1.0. В каком каталоге искать определение, которое вы имеете в виду?   -  person Eugene    schedule 01.04.2019
comment
Тот, где находится библиотека (oraocci12.lib и т.д.). Но я боюсь, что вам придется использовать тот же компилятор, что и Oracle, чтобы связать эти библиотеки. Я не уверен, что g++ 8.1.0 совместим с ABI (я не знаю, какой оракул компилятора использует в Windows).   -  person Gojita    schedule 02.04.2019
comment
Интересная ситуация. Есть ли у вас какие-либо рекомендации по этому поводу? Я уверен, что это определение есть в oraocci12.lib. Более того, я попытался преобразовать эти библиотеки в формат .a и связать с ними свою программу. В результате компилятор сообщил, что преобразованные библиотеки .a несовместимы.   -  person Eugene    schedule 02.04.2019
comment
Единственное, о чем я могу думать, это использовать MS Visual Studio для создания вашего приложения (я не знаю, есть ли бесплатная версия Visual Studio)   -  person Gojita    schedule 02.04.2019


Ответы (1)


В проекте я работаю, конфигурация следующая

#----- Environnement specifique Oracle -----
ORACLEINC    = $(ORACLE_HOME_DEV)/include
ORACLELIB    = $(ORACLE_HOME_DEV)/lib32
ORACLEBIN    = $(ORACLE_HOME_DEV)/bin
ORAINC = -I$(ORACLEINC) -I$(ORACLE_HOME_DEV)/rdbms/demo -I$(ORACLE_HOME_DEV)/precomp/public -I$(ORACLE_HOME_DEV)/plsql/public -I$(ORACLE_HOME_DEV)/network/public
ORALIB = -L$(ORACLELIB) -L$(ORACLE_HOME_DEV)/rdbms/lib -L$(ORACLE_HOME_DEV)/precomp/lib -L$(ORACLE_HOME_DEV)/plsql/lib -L$(ORACLE_HOME_DEV)/network/lib

где ORACLE_HOME_DEV --> /exec/products/oracle/v10.2/

Библиотека, которую вы ищете, должна быть здесь

libocci.a.10.1 -> /exec/products/oracle/v10.2/lib32/libocci.a

person cprogrammer    schedule 01.04.2019
comment
в моем дистрибутиве оракула (v 12.1) нет таких каталогов, о которых вы упомянули. - person Eugene; 01.04.2019