Компиляция OCCI с помощью g++ в Linux

Я пытаюсь скомпилировать базовую программу, используя библиотеку OCCI.

Задача компиляции в порядке.

g++ -I. -g -I/opt/oracle/product/10.2.0/db_1/precomp/public -I/opt/oracle/product/10.2.0/db_1/rdbms/public -I/opt/oracle/product/10.2.0/db_1/rdbms/demo -I/opt/oracle/product/10.2.0/db_1/plsql/public -I/opt/oracle/product/10.2.0/db_1/network/public -DMAX_SEND_SIZE=2000   -c -o test.o test.cpp

вывод в порядке, test.o сгенерирован. Но когда я хочу связать объектный файл с помощью следующей команды,

g++ -L/opt/oracle/product/10.2.0/db_1/lib/ -lclntsh -locci -o test test.o

Задача связывания не удалась, вывод:

 test.o: In function `main':
/home/xxx/occi/test.cpp:128: undefined reference to `oracle::occi::Environment::createEnvironment(oracle::occi::Environment::Mode, void*, void* (*)(void*, unsigned int), void* (*)(void*, void*, unsigned int), void (*)(void*, void*))'
/home/xxx/occi/test.cpp:170: undefined reference to `oracle::occi::Environment::terminateEnvironment(oracle::occi::Environment*)'
/home/xxx/occi/test.cpp:158: undefined reference to `oracle::occi::SQLException::~SQLException()'
/home/xxx/occi/test.cpp:158: undefined reference to `oracle::occi::SQLException::SQLException(oracle::occi::SQLException const&)'
/home/xxx/occi/test.cpp:163: undefined reference to `oracle::occi::SQLException::what() const'
/home/xxx/occi/test.cpp:158: undefined reference to `oracle::occi::SQLException::~SQLException()'
test.o:(.gcc_except_table+0xe0): undefined reference to `typeinfo for oracle::occi::SQLException'
collect2: ld returned 1 exit status

Моя среда резюме:

  • Убунту Линукс 11.04
  • gcc версии 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
  • ORACLE_HOME = /opt/оракул/продукт/10.2.0/db_1
  • LD_LIBRARY_PATH = /opt/oracle/product/10.2.0/db_1/lib
  • Версия Оракула: 10.2.0

Не могли бы вы мне помочь? Мне действительно нужно создать соединение с Oracle с помощью OCCI в Linux, и я не хочу использовать Pro*C.


person fdaines    schedule 12.06.2012    source источник
comment
Вы пытались изменить порядок включения библиотеки на этапе ссылки? Это может быть важно.   -  person mathematician1975    schedule 12.06.2012
comment
да пробовал, результат тот же.   -  person fdaines    schedule 12.06.2012


Ответы (1)


Чтобы использовать OCCI, вам необходимо установить Instant Client, предоставленный Oracle (вы установили?). Я использую Oracle 11.2, поэтому мой путь к каталогу включения — /usr/include/oracle/11.2/client64, а мои общие библиотеки — /usr/lib/oracle/11.2/client64/lib.

я видел здесь

http://173.255.217.246:8000/mapnik_trac/wiki/OCCI

этот путь 10.2 - /usr/lib/oracle/10.2.0.4/client/include и /usr/lib/oracle/10.2.0.4/client/lib

В 11.2 мне также нужно сначала связать с nnz11 lib как http://xme.im/connect-oracle-database-eclipse-linux-using-occi

В этом полезном блоге описывается Instant Client http://oradim.blogspot.com/2009/08/getting-started-with-occi-linux-version.html

person Truong Hua    schedule 03.08.2012