윈도우즈에서 리눅스 서버(오라클설치)로 원격 접속하여 Pro*C 환경설정 및 컴파일 과정입니다.
putty 이용하여 root 계정 및 오라클 계정으로 접속하여 진행합니다.
1. 사용자 계정 환경설정
$ vi .bash_profile
# ORACLE 11g Env
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_BASE=/usr/oracle/app /*개인경로에 맞게 수정*/
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/dbhome_2 /*개인경로에 맞게수정*/
export ORACLE_SID=orcl
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export ORACLE_TERM=xterm
export NLS_LANG=KOREAN_KOREA.AL32UTF8
export PATH=$HOME/bin:$ORACLE_HOME/bin:/bin:/usr/bin:/usr/sbin:.:$PATH
export SHLIB_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib:$SHLIB_PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/lib:/usr/local/lib:$LD_LIBRARY_PATH
-적용
$ . ~/.bash_profile
2. 환경변수 수정
- stddef.h 파일 경로 확인
$ find /usr -name "stddef.h"
- pcscfg.cfg 파일 수정
$ find / -name 'pcscfg.cfg' 경로찾기
- 환경변수 수정 (위의 경로 그대로 복사)
$ vi /usr/oracle/app/product/11.2.0/dbhome_2/precomp/admin/pcscfg.cfg
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include)
include=($ORACLE_HOME/precomp/public)
include=$ORACLE_HOME/rdbms/demo
include=$ORACLE_HOME/network/public
include=$ORACLE_HOME/plsql/public
ltype=short
PARSE=NONE
: 아래 부분 개인경로설정 중요!
/usr/lib/gcc/x86_64-redhat-linux/4.8.5/include
위에서 stddef.h 확인한 경로
기본 경로 확인할때는
/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/ 로 나옵니다.
하지만! gcc-v 확인시 4.8.5 로 나오므로 4.8.2 부분 4.8.5로 수정해야 합니다.
$ gcc -v
3. pc 파일 작성
$ vi test.pc
#include <stdio.h>
#include <string.h>
EXEC SQL INCLUDE SQLCA; /*#include <sqlca.h> 와 동일, 프로그램 정보를 데이터베이스와 교환하기 위한 sql 통신영역 */
int main() {
/* 호스트 변수(SQL,프로그램 문에서 참조되어 사용) 선언 */
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR user[20],pass[20],tnsname[20];
char name[20];
int id;
int i=0;
const char* uid = "SCOTT"; 개인PC 설정 확인
const char* pwd = "1234"; 개인PC 설정 확인
const char* tns = "ORCL"; 개인PC 설정 확인
EXEC SQL END DECLARE SECTION;
/* log on oracle */
strcpy((char*)user.arr, uid);
user.len=(unsigned short)strlen((char *)user.arr);
strcpy((char*)pass.arr, pwd);
pass.len=(unsigned short)strlen((char *)pass.arr);
strcpy((char*)tnsname.arr, tns);
tnsname.len=(unsigned short)strlen((char *)tnsname.arr);
/* sql 묵시적 오류 처리 : SQLERROR: 현재문장이 에러를 발생시킬때 error_msg로 이동 */
EXEC SQL WHENEVER SQLERROR GOTO error_msg;
/* Connect Database */
EXEC SQL CONNECT :user IDENTIFIED BY :pass using :tnsname;
printf("Connect successful\n");
printf("Starting to get data from emp\n");
EXEC SQL declare emp_cursor cursor for select empno, ename from emp;
EXEC SQL open emp_cursor;
/* NOT FOUND 처리 */
EXEC SQL WHENEVER NOT FOUND DO break;
while(1)
{
EXEC SQL fetch emp_cursor into :id, :name; /* 호스트변수 사용 콜론( : ) */
printf("ID is %d || Name is %s\n", id, name);
}
EXEC SQL close emp_cursor;
EXEC SQL commit work release;
return 0;
/* SQL 오류발생시 error_msg : Connect failed 출력 */
error_msg:
printf("Connect failed\n");
return -1;
}
4. Makefile 작성
$ vi Makefile
OBJ=test.o
PCSRC=test.pc
SRC=test.c
CC=gcc
PROC=proc
LDLIB=/$(ORACLE_HOME)/lib
FLAGS=-ldl -lm -lclntsh
TARGET=test
$(TARGET) : $(OBJ)
$(CC) -o $(TARGET) $(OBJ) -L$(LDLIB) $(FLAGS)
$(OBJ) : $(SRC)
$(CC) -c $(SRC)
$(SRC) : $(PCSRC)
$(PROC) $(PCSRC)
clean :
rm -rf $(OBJ) $(SRC) $(TARGET) *.lis
all : $(TARGET)
/* 컴파일 tip
1. proc iname=test.pc
2. cc -c test.c
3. cc -o test.c test.o -L/$ORACLE_HOME/lib -lclntsh */
5. 컴파일
$ make all
: test 파일 생성된것을 확인할 수 있습니다.
PCC-S-02201 에러가 발생하는 경우가 많습니다.
이때는 2번과정으로 돌아가 pcscfg.cfg 환경변수 파일을 다시 한번 확인해 보도록 합니다.
6. 신규로 생성된 test 파일 실행
$ ./test
* 그 외 오류 해결
1 ./test 파일 실행시 connet failed 발생
test.pc의 TNS 네임을 잘못 설정하여 발생한 오류입니다.
현재 원격 서버는 192.168.70.~~~ 에 접속중이며 TNS_NAME 은 ORCL 로 되어있습니다.
즉 3번 과정의 vi test.pc 파일을 실행하여 아래의 값을 확인해봅니다.
const char* uid = "SCOTT"; 접속할 계정명
const char* pwd = "1234"; 비밀번호
const char* tns = "ORCL"; 위의 TNS명 과 일치하는지 확인!
2 PCC-S-02015
#include <gnu/stubs-32.h>
PCC-S-02015, 포함하고 있는 파일을 열 수 없습니다
컴파일과 실행은 되지만 오류 msg가 뜹니다. 64 bit 리눅스에서 진행시 stubs-32.h 파일이 누락되어 발생하는 문제인것 같습니다.
아래의 코드 실행시 glibc-devel 설치가 진행되며 오류가 더이상 뜨지 않습니다.
# yum -y install glibc-devel.i686 glibc-devel
참고사이트 ( cent_os 외 다른버전 참고하세요)
https://www.cyberciti.biz/faq/x86_64-linux-error-gnustub-32h-missing-error-and-solution/
'Pro*C' 카테고리의 다른 글
Oracle_Pro*C 실무프로젝트 활용서_3 (1) | 2020.02.03 |
---|---|
visual studio2019에서 .pc 파일 컴파일 하기 (0) | 2020.01.22 |
Oracle Pro*C 실무 프로젝트 활용서_2 (0) | 2020.01.10 |
Oracle Pro*C 실무프로젝트 활용서_1 (0) | 2020.01.07 |
Pro*C 기본개념 _ 1 (0) | 2020.01.03 |