database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Tutorials 23528 게시물 읽기
No. 23528
SAPDB Precompiler 사용기
작성자
남녀평등(linux199)
작성일
2002-12-04 08:30
조회수
9,494

이제 설치된 DB를 가지고 precompiler 프로그래밍을 짜보자

우선 precompiler를 이용하려면 sapdb-precompiler-7.4.3.7beta-1.i386.rpm를 먼저 설치해야 한다

http://www.sapdb.org/7.4/sap_db_downloads.htm에서 다운받도록 하자

 

다운을 받았으면 이제 설치하자

 

rpm -ivh sapdb-precompiler-7.4.3.7beta-1.i386.rpm

 

바로 설치가 된다

그런데 문제가 하나 있다

RPM Package상의 문제인지 아니면 다른 문제인지는 몰라도 실제로 설치하고나서 동작해 보면 에러를 발생시킨다

우선 문제의 프로그램으로 이동해 보자

 

cd /opt/sapdb/interfaces/precompiler/bin/

 

여기에 있는 cpc 파일이 precompiler(?) 해주는 파일이다.

실행해보자

[sapdb@hancom bin]$ ./cpc

Error: program /opt/sapdb/interfaces/precompiler/sdk/7403/pgm/pgm64/pc3 not found

 

위와 같은 에러가 난다. 왜 위의 프로그램을 찾는지는 모르겠다.

하지만 디렉토리를 잘 살펴보면

 

[sapdb@hancom bin]$ ls /opt/sapdb/interfaces/precompiler/pgm/

pc3

 

/opt/sapdb/interfaces/precompiler/pgm/ 라는 디렉토리 밑에 pc3이라는 파일이 있다

그럼 모 일단은 편법이라도 실행이 되도록 해보자

그 파일을 지정된 디렉토리에 복사를 하거나 링크를 걸어준다

 

[sapdb@hancom bin]$ mkdir -p /opt/sapdb/interfaces/precompiler/sdk/7403/pgm/pgm64

[sapdb@hancom bin]$ ln -s /opt/sapdb/interfaces/precompiler/pgm/pc3 /opt/sapdb/interfaces/precompiler/sdk/7403/pgm/pgm64/

 

이제 다시 cpc를 실행해보자

 

[sapdb@hancom bin]$ ./cpc

usage: ./cpc [cCd:D:eE:F:H:hiI:lm:M:n:opP:qRsS:t:Tu:U:VwXy:Yz] fname [compopts]

./cpc -h : display help information

 

일단 제대로 동작은 한다

 

그럼 이제 실제 프로그램을 짜보도록 하자

 

사용상의 편리함을 위해서 precompiler의 디렉토리도 PATH에 넣어두자

 

[sapdb@hancom sapdb]$ export PATH=$PATH:/opt/sapdb/interfaces/precompiler/bin

 

자 그럼 일단 아주 간단한 프로그램을 하나 작성해 보자

프로그램의 하는 일은 단순히 DB에 접속했다가 접속을 끊어버리는 일만을 한다

아래의 소스를 보자

 

#include <stdio.h>

#include <string.h>

 

int main()

{

exec sql begin declare section;

char DB_NAME[20];

char DB_HOST[40];

exec sql end declare section;

 

strcpy(DB_NAME, "TST");

strcpy(DB_HOST, "");

 

exec sql set serverdb :DB_NAME on :DB_HOST;

 

if (sqlca.sqlcode != 0)

printf("(%d) %sn", sqlca.sqlcode, sqlca.sqlerrmc);

else

printf("OKn");

 

exec sql connect test identified by test;

 

exec sql commit release;

 

return 0;

}

 

위의 내용을 test.cpc라는 파일로 저장한다

 

이제 아래와 같이 해서 컴파일을 해보자

컴파일 순서는 cpc 를 통해 cpc파일을 c 파일로 변환후 그것을 gcc를 통해서 실행파일로 만들어 낸다

 

우선 아래와 같이 명령을 줘보자

 

[sapdb@hancom sapdb]$ cpc -Hnocheck -c test -Wall -I/opt/sapdb/depend74/incl -I/opt/sapdb/interfaces/precompiler/incl

cpc options: -Hnocheck -c file: test.cpc

SAP AG SAP DB C-PreComp Version 7.4.3 Build 007-000-030-320

Copyright 2000 by SAP AG

14 PRECOM-WARNING : -885 Variable may be truncated

14 VARIABLE-NAME : 1: SERVERDB_PARAMETER

:

: 1 WARNINGS

: NO DETECTED ERRORS

test.cpc no compilation with option -c

test.c saved

 

무슨 경고가 뜨고 그러는데 어쨌거나 맨 마지막 메시지를 보면 test.c saved라는 메세지가 보인다

ls 해서 보면 test.c 파일이 생성되어 있을 것이다

vi 등으로 열어보면 무슨 알지도 못할 정도로 내용이 들어있다.

어쨌거나 모든것은 무시하고 이제 object 파일을 만들고 실행파일을 만들어내보도록 하자

우선 object 파일을 만들어 보자

 

[sapdb@hancom sapdb]$ gcc -O2 -g -Wall -I/opt/sapdb/depend74/incl -I/opt/sapdb/interfaces/precompiler/incl -c -o test.o test.c

 

이제 실행파일을 만들어 내자

 

[sapdb@hancom sapdb]$ gcc -o test test.o -L/opt/sapdb/depend74/lib -L/opt/sapdb/interfaces/precompiler/lib -lpcrl -lsqlca -ldl

/opt/sapdb/interfaces/precompiler/lib/libpcrl.a(ven40-i.o): In function `sqlerrs':

ven40-i.o(.text+0x33): `sys_errlist' is deprecated; use `strerror' or `strerror_r' instead

ven40-i.o(.text+0x1e): `sys_nerr' is deprecated; use `strerror' or `strerror_r' instead

 

무슨 경고가 뜨고 하지만 어쨌거나 test 라는 실행파일은 만들어졌다

이제 실행해보자

 

[sapdb@hancom sapdb]$ ./test

OK

 

OK가 뜨면 제대로 동작되는 것이다

precompiler에 대한 내용은 precompiler 메뉴얼을 보면 누구나 알 수 있을 정도로 자세하게 나와있다.

영어를 모르더라고 예제문만 봐도 알 수 있도록 해 놓았으니 꼭 메뉴얼을 읽어보기 바란다.

 

참고로 위의 형태로 컴파일을 하면 대단히(?) 불편하기 때문에 내가 쓰는 Makefile을 올리도록 하겠다.

이것을 자신에 맞게 수정해서 쓰면 편리할 것이다

 

 

# Defines

CC=gcc

 

DEP=/opt/sapdb/depend74

PRECOMPILER=/opt/sapdb/interfaces/precompiler

 

CPC=$(PRECOMPILER)/bin/cpc

CPCFLAGS=-Hnocheck -dMODELL -ubuild,compiler -s -c

INCLUDE=-I$(DEP)/incl -I$(PRECOMPILER)/incl

 

CFLAGS=-O2 -g -Wall $(INCLUDE)

LIBS=-L$(DEP)/lib -L$(PRECOMPILER)/lib -lpcrl -lsqlca -ldl

SQLOPT=-X

 

# Generic rules

%.c: %.cpc

$(CPC) $(CPCFLAGS) $(basename $<) $(CFLAGS) $(CPPFLAGS)

 

%o: %.c

$(CC) -c $(CFLAGS) $<

 

# Project-dependend rules

OBJ=test

all: $(OBJ)

 

test: test.o

$(CC) -o test test.o $(LIBS)

 

clean:

rm -f *.o *.c $(OBJ)

 

 

distclean: clean

rm -f *.lst *.pcl *.pct

[Top]
No.
제목
작성자
작성일
조회
23531SAPDB Precompiler를 이용한 간단한 사용자 관리 예제 프로그램
남녀평등
2002-12-04
12638
23530SAPDB PYTHON Interface 사용기
남녀평등
2002-12-04
10550
23529SAPDB ODBC 사용기
남녀평등
2002-12-04
11923
23528SAPDB Precompiler 사용기
남녀평등
2002-12-04
9494
23527SAPDB 설치 + 사용기
남녀평등
2002-12-04
10305
23526SAPDB (Debian) Linux Quickstart Howto
정재익
2002-10-11
9212
23525Sapdb standby HA Howto
정재익
2002-10-11
9872
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.049초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다