LINUX.ORG.RU

Все зубы поломал.


0

0

Вы уж не смейтесь, pls. Как правильно устанавливать библиотеки для С. Я установил libsqlora8-2.1.6 для доступа к DB Oracle. И не могу ни одной своей программы закомпелировать. Кро с этим работал подскажите, pls.
Я использую следующие команды:
g++ -g -Wall -c test.cc
Пока все нормально, а вот команда:
g++ -g -o test test.o sqlora.o
Выдает кучу сообщений что в sqlora неопределены все OCI*
Попытка скомпилировать sqlora.c (g++ -g -Wall -c sqlora.c) выдает ошибку типа: не могу найти oci.h (#include "oci.h").

Как быть. А то у меня задача. Переписать скрипты с Perl на C/C++ для увеличения скорости.
Или может какую другу библиотеку использовать?

★★★

g++ -g -Wall -c sqlora.c -Iдиректория_с_инклудами_для_libsqlora8.
g++ -g -o test test.o sqlora.o -Lдиректория_с_.so_или_.a_от_libsqlora8 -lназвание_либы_без_lib_например_sqlora8
А лучше info gcc - там все найдешь.
P.S. Никогда не юзал эту либу, поэтому более конкретных команд дать не могу.

timur
()

Команда:
g++ -g -Wall -c sqlora.c -I /oracle/app/oracle/product/8i/rdbms/public

Сообщение: sqlora.c:334: `INTEGER' was not declared in this scope
sqlora.c:335: `STRING' was not declared in this scope
sqlora.c:336: `INTEGER' was not declared in this scope
sqlora.c:337: `INTEGER' was not declared in this scope
sqlora.c: In function `struct sqlo_stmt_t * sqlo_stmt_new(struct sqlo_db_t *, struct OCIStmt *, ub2, const char *)':
sqlora.c:465: warning: ANSI C++ forbids implicit conversion from `void *' in assignment

Не могу понять. Как же тогда тестовый пример закомпилировался.

Korwin ★★★
() автор топика
Ответ на: комментарий от Korwin

ты забыл добавить к инклюдам $ORACLE_HOME/network/public и $ORACLE_HOME/rdbms/demo

vsl
()

Я их вставил, но все равно выдает это сообщение по поводу несоответствия с ANCI C++. Хотел найти команду компиляции в make файле, на запутался в нем.

Korwin ★★★
() автор топика

То, что ты принимаешь за ошибку по поводу несоответствия с ANSI C++ всего лишь предупреждение, которого конечно надо избегать, но скомпилироваться это должно. С инклюдами у тебя тоже все в порядке, иначе выдавалось бы сообщение о том, что невозможно найти какой нибудь .h. Похоже ты не прописал какой-то namespace. Почитай инклуды на предмет namespace и припиши к этим идентификаторам (INTEGER etc.) нужный.

timur
()

Все равно не работает. Зараза. Может кто подскажет другую либу для доступа к Ораклу. ocicpplib-0.4.2 не предлагать. Компилируется нормально, но bind вываливается в core и другие команды не стабильно работают.

Korwin ★★★
() автор топика

Всем спасибо заработало!!!
Команды для компиляции:
g++ -g -Wall -c test.c

g++ -g -o test test.o /usr/src/libsqlora8-2.1.6/sqlora.o \
-I/usr/src/libsqlora8-2.1.6 \
-L$ORACLE_HOME/lib -lclntsh

Компилирует нормально. Правда при запуске выдает:
Segmentation fault (core dumped)

Т.к. прилагаемый тестовый файл работает. То дело несложное.
Еще раз всем огроооомное спасибо.

Korwin ★★★
() автор топика

K voprosu o ocicpplib-0.4.2 vse rabotaet nado tolko pochitat doki na OCI eshe chut chut ty nebos tak delal : cur.bind(":par","val",&isNull); nu tak vot snachala "val" nado kudanit polozhit isNull = 0 dolzhen byt i vse rabotaet eto ne liby glyuki i prihoti a OCI a chto ostalnoe to nerabotaet ?

master
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.