Ubuntu DB2 g cc приготовление ошибок в функциях slqastrt, sqlacall, sqlastop - PullRequest
0 голосов
/ 30 марта 2020

Я сейчас пытаюсь сделать простое «создание таблицы» C - встроенное sql приложение с g cc.

My sq c код файла:

#include <stdio.h>
#include <string.h>
#include <sqlca.h>

/* CREATE A DATABASE TABLE FOR TESTING COBOL-C-DB2 */
/* SQL includes */
  EXEC SQL INCLUDE SQLCA;
  EXEC SQL BEGIN DECLARE SECTION;
  EXEC SQL END DECLARE SECTION;

int main()
{
 EXEC SQL CREATE TABLE SYT006_COUNTRY(
 KEYFIELD                INT NOT NULL,
 SL_ISO2                 CHAR(2) NOT NULL,
 BZ_COUNTRY              CHAR(30) NOT NULL,
 KZ_RISK                 CHAR(1) NOT NULL,
 PRIMARY KEY (KEYFIELD)
 );
return (0);
}

db2 prep создает файл C, в случае указания пути в g cc для папки включения DB2, например, работает строка #include "sqladef.h".

В ре написанная основная функция, однако она вызывает три функции, которые я не могу найти в заголовках:

#line 25 "create_table.sqc"
sqlastrt(sqla_program_id, &sqla_rtinfo, &sqlca);
#line 25 "create_table.sqc"
sqlacall((unsigned short)24,1,0,0,0L);
#line 25 "create_table.sqc"
sqlastop(0L);

и сообщает об ошибке:

undefined reference to `sqlastrt'

И после записи -Wl в g cc строка для связывания чего-либо с чем-то, теперь я получаю сообщение об ошибке:

 /usr/bin/ld: cannot find : No such file or directory
 collect2: error: ld returned 1 exit status

мой скрипт

db2start
db2 connect to sample
db2 prep create_table.sqc bindfile
db2 bind create_table.bnd
gcc -Wl, -Wimplicit -fno-stack-protector -trigraphs create_table.c -o runner - 
I/home/nikica/sqllib/include
./runner

Исполняемый файл "runner" не создан

1 Ответ

1 голос
/ 30 марта 2020

Эти функции являются частью библиотек Db2. Заголовочные файлы, поставляемые с Db2, имеют определения функций et c. Вы должны использовать их.

Ваш пример вопроса:

  • опускает правильные заголовочные файлы Db2 в вашем .sq c источнике

  • пропускает путь к библиотеке и библиотеку Db2 из командной строки компоновщика

Изучите все примеры IBM, которые уже есть в вашей установке Db2 (например: в каталоге /home/db2inst1/sqllib/samples/c). Скопируйте содержимое этого каталога в свой собственный домашний каталог и получите эти примеры, созданные и работающие в локальной базе данных, используя сценарии сборки IBM, которые находятся в том же каталоге (bldapp, bldrtn et c). Это будет хорошо потраченное время.

В вашем случае, когда вы создаете приложение из встроенного SQL в C, вы можете использовать пример сценария bldapp для создания исполняемых файлов, и вы должны включать дополнительные файлы заголовков в ваш файл .sq c (например, sqlenv.h, sqlutil.h, db2ApiDf.h et c). Сценарий bldapp показывает, как задать путь к библиотеке для компоновщика и как включить требуемую библиотеку, включающую функции, на которые ссылается вывод препроцессора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...