Я использую OpenVMS V8.4 в качестве сервера базы данных Oracle 10g со встроенным компилятором CXX
, а также компилятором PROC
, предоставленным oracle.
Я написал этот пример программы на С:
sample.c
#include<stdio.h>
exec sql include sqlca; // adds Oracle PLSQL library
// same as #include<sqlca.h>
main() {
printf("Hello, World!\n");
}
тогда я его скомпилировал
DEVSERVER> PROC SAMPLE.C SAMPLE.PC
Команда работает find, и я могу затем использовать встроенный компилятор CXX
:
DEVSERVER> CXX SAMPLE.PC
Команда работает без ошибок, и теперь я могу использовать встроенную команду LINK
:
DEVSERVER> LINK SAMPLE
теперь я могу запустить файл:
DEVSERVER> RUN SAMPLE
и я получаю ожидаемый результат:
Привет, мир!
Итак, все в порядке. Но моя программа пока не делает ничего полезного. Итак, давайте сначала подключимся к схеме базы данных.
Я изменил SAMPLE.C
на:
#include<stdio.h>
exec sql include sqlca;
main() {
printf("Hello, World!\n");
exec sql connect scott identified by tiger;
// I skipped checking for sqlca.error since LINKer wont even allow
// me to create EXE of this file
}
Теперь я прекомпилирую, как и раньше:
DEVSERVER> PROC SAMPLE.C SAMPLE2.PC
DEVSERVER> CXX SAMPLE2.PC
DEVSERVER> LINK SAMPLE2
и вот где я получаю эту ошибку:
%ILINK-W-NUDFSYMS, 1 undefined symbol:
%ILINK-I-UDFSYM, CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP
%ILINK-W-USEUNDEF, undefined symbol CX3$Z6SQLCXTPPVPJP6SQLXD384K7FP refernced
source code name: "sqlcxt(void **, unsigned int *, sqlexd *, const sqlcxp *)"
section: .text
offset: %X0000000000000350 slot: 2
module: SAMPLE2
file: DEV$SERVER[SOURCE]SAMPLE2.OBJ;1
Та же самая ошибка возникает всякий раз, когда я пытаюсь выполнить любой оператор SQL в блоке exec sql
в коде.
Что я делаю не так?