EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 3명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·Sorting Algorithm Animation (2)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

리눅스 6.2 & 오라클 8.1.5 & GCC에서 PRO*C 사용
글쓴이: EzDoum 글쓴날: 2002년 04월 10일 오후 04:31




리눅스 6.2 & 오라클 8.1.5 & GCC에서 PRO*C 사용

위의 조화는 환상적이라 본인도 헤맸다.
만일 내가 필수적으로 사용해야 할 환경이 아니라면 도중에 포기했을 것이다.
아무튼 오라클 8.1.5와 리눅스 6.2는 세팅하기가 번거롭다.

구구절절 설명을 생략하고 일단 본론만 이야기 하자.
사용환경은 다음과 같다.

Kernel: 2.4.0 (RedHat 6.2에서 업그레이드했다.)
glibc: 2.1.3-15
glibc-devel: 2.1.3-15
gcc: egcs-2.91.66
Oracle: 8.1.5

오라클 8.1.5의 경우 pro*c는 인스톨 화면에서 programmer어쩌고 하는 3번째 메뉴를
선택하면 된다. 오라클 8.1.6의 경우 설치화면에서 Client라고 된 메뉴를 선택해야
한다. 8.0.5는 기억이 나지 않는다. 하도 오래(?)되어서..

일단 proc를 설치하고 쉘상에서 proc라고 치면 무어라 주~욱 나오면 성공이다.
리눅스는 gcc로 되어 있기(?) 때문에, pro*c의 c컴파일러를 gcc로 변경해준다.
즉, Makefile에서 컴파일러를 gcc로 지정해준다.
미리 만들어 놓은 makefile이 있다. [여기](demo_proc.mk에 gcc컴파일이 가능하게 수정한 것이다.)를 눌러 받는다.
이 makefile은 solaris에서 설정한 것이라 73라인의 -lxnet -lsocket옵션은 제거해야 한다.
리눅스는 특이하게 소켓프로그래밍에서 링크시 이 옵션을 사용하지 않는다.
76라인에서 컴파일할 파일이름(확장자없이)을 적어준다.

[여기] http://dbakorea.pe.kr/misc/kang.mk

음.. 옆길로 세는 것 같다.


그냥 컴파일하면 무슨 system include파일을 찾지 못해 에러를 좌악 뱉는다.
이건 아무래도 오라클사의 잘못인 것 같다.

$ORACLE_HOME/precomp/admin/pcscfg.cfg파일을 보라
아무 내용도 없다. 다음과 같이 채운다.

[oracle@tiger admin]$ cat pcscfg.cfg
sys_include=($ORACLE_HOME/precomp/public,/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include,/usr/include,/usr/lib/bcc/include,/usr/include/linux)

중요한 점은 egcs-2.91.66으로 경로를 잡아줘야 한다.
내가 겪은 환경에서는 다음과 같이 해주었다.

Linux 6.2(Mizi)
[root@ns /root]# cat /u01/app/oracle/product/8.1.7/precomp/admin/pcscfg.cfg
sys_include = ($ORACLE_HOME/precomp/syshdr,/usr/lib/gcc-lib/i386-pc-linux/egcs-2.91.66/include/,/usr/include)
include = $ORACLE_HOME/precomp/public
include = $ORACLE_HOME/rdbms/demo
include = $ORACLE_HOME/rdbms/public
include = $ORACLE_HOME/network/public
include = $ORACLE_HOME/plsql/public
include = $ORACLE_HOME/otrace/public
ltype = short

Wow Linux7.0
[root@ns /root]# cat /u01/app/oracle/product/8.1.7/precomp/admin/pcscfg.cfg
sys_include = ($ORACLE_HOME/precomp/syshdr,/usr/lib/gcc-lib/i386-pc-linux/egcs-2.91.66/include/,/usr/include)
include = $ORACLE_HOME/precomp/public
include = $ORACLE_HOME/rdbms/demo
include = $ORACLE_HOME/rdbms/public
include = $ORACLE_HOME/network/public
include = $ORACLE_HOME/plsql/public
include = $ORACLE_HOME/otrace/public
ltype = short


이렇게 하면 일단 간단한 pro*c파일들은 컴파일할 수 있다.
몇몇 배포본(특히, 우리나라의 미지, 한컴등..)은 /usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include
부분이 다를 수 있으므로 필히 path를 확인해 자신의 환경에 맞게 설정해야 한다. 대개 라이브러리버전과
redhat이라고 되어 있는부분이 pc로 되어 있는 경우가 많았다.

소켓프로그래밍시 추가작업
소켓을 사용하는 프로그램을 컴파일하면 INTERNAL ERROR를 뱉으면서 죽어버린다.
이유는 include하는 sys/socket.h등의 네트웍관련 헤더파일들 때문이다.
sys/socket.h등은 limits.h헤더파일을 참조하는데 이는 다음과 같이 되어 있다.

# include_next <limits.h>

pro*c가 include_next문법을 이해하지 못해 발생한다.
본인도 include_next는 처음봤다. 무식하다고 해도 할말없다. 정확한 의미도 모르겠다.
지금은 소켓프로그래밍하는 것이 우선이다.
이것을 다음과 같이 수정하면 된다.

# include <limits.h>

시스템 include디렉토리에 있는 것이라 찝찝하지만, 어쩔 수 없다.



# include_next <limits.h>를 # include <limits.h>로 수정할 파일
/usr/include/limits.h
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/limits.h



완전 변경파일
/usr/lib/gcc-lib/i386-redhat-linux/egcs-2.91.66/include/syslimits.h

마지막으로 다음의 파일에서는 # include_next <limits.h> 라고 된 부분을 아예 주석처리해야 한다.
안그러면 pro*c의 컴파일이 무한루프에 빠진다. 즉,

#define _GCC_NEXT_LIMITS_H /* tell gcc's limits.h to recurse */
#include_next <limits.h>
#undef _GCC_NEXT_LIMITS_H

와 같이 되어 있는 부분을 모두 없애버리거나 limits.h만 남겨둔다.

#include <limits.h>



IPC사용시 추가작업
/usr/include/sys/ipc.h

다음 부분을 찾아서 완전 삭제한다.
#if !defined __USE_SVID && !defined __USE_XOPEN && __GNUC__ >= 2
# warning "Files using this header must be compiled with _SVID_SOURCE or _XOPEN_SOURCE"
#endif




자, 그럼 모든 것이 완료되었다.
cpscfg.cfg의 수정에 대한 내용은 다른 곳($ORACLE_HOME/precomp/doc/proc2/readme.doc)에 있었는데,
소켓이 연결될때 발생하는 문제점에 대해서는 기술한 곳이 없었다.
목마른 놈이 우물판다고 직접할 수 밖에 없었다.

아무튼 위와 같은 환경에서 고생(?)하실 분이 있을 것 같아 긁적거려봤다.
끝.


음.. 내가 사용하는 Makefile이다.
Makefile(간단한 컴파일 테스트용)
http://dbakorea.pe.kr/misc/Makefile

Makefile2(여러개의 소스를 컴파일할 수 있도록 수정)
http://dbakorea.pe.kr/misc/Makefile_multi

Makefile3(자신이 정의한 헤더,라이브러리를 사용할 수 있도록 수정)
http://dbakorea.pe.kr/misc/Makefile_custom

필요한 부분만 정의했기때문에 수정하기 편할 것이다.


[추가사항] - 2001년 11월 8일
7.1(Paran)에서는 2.91.66이 아예 존재하지 않았고, 2.96밖에 설치되어 있지 않았다.
따라서 kgcc라는 패키지를 깔아줘야 한다.
rpmfind.net에 가서 kgcc를 키워드로 검색하여 다음을 다운받아 설치했다.

kgcc-1.1.2-40.i386.html The GNU C Compiler for kernel compilation RedHat-7.0 for i386 kgcc-1.1.2-40.i386.rpm

설치하면 /usr/lib/gcc-lib/i386-glibc21-linux/egcs-2.91.66/include라는 디렉토리가 생기므로
이 디렉토리를 pcscfg.cfg에 설정해준다.

물론 위에서 한 것처럼 헤더파일들의 수정을 해줘야 한다는 것을 잊지 말자.


첨부화일은 본문에 나온 Makefile 예제입니다.

* 관리자 추가(EzDoum):
이 글은 여기서 (http://dbakorea.pe.kr ) 가져온 것입니다..

  • 첨부 파일: Makefile.zip Makefile.zip (4 KiB(3,686 Bytes))

  • 관련 링크
  • [분류: 데이터베이스 인쇄용 페이지 본문 email로 보내기 ]

    <  리눅스 7.0에서 오라클 8.1.7 설치 & PRO*C사용 | 생명의 파노라마 II  >

    답장 쓰기
    글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

    검색
    Google

    분류
    ·공지 (6)
    ·인터넷 (87)
    ·하드웨어 (260)
    ·C/C++ (65)
    ·어셈블리 (7)
    ·리눅스 (136)
    ·리눅스 커널 (67)
    ·윈도우즈 (25)
    ·데이터베이스 (20)
    ·보안 (16)
    ·.NET (25)
    ·그래픽 (13)
    ·책소개 (42)
    ·호기심 천국 (80)
    ·잡담 (111)
    ·사랑 (3)

    전체 본문수: 963
    전체 답장수: 525


    분류 : 데이터베이스
    최근글
    최근글
    가장 많이 읽은 글
    ·The Ubiquitous B-Tree (1)
    뜨거운 감자
    ·Tkprof를 이용한 SQL Trace 실행 순서 (3)

    EzDoum투표
    이지도움 어때요?
    이게 뭐야. 다시 안올란다. --;
    아이 좋아라~ +_+;
    관심없다.
    먼가는 있는거 같은데 뭐하는 곳이지?
    기타 (자유게시판에 글로 남겨 주세요)
    [ 결과 | 투표 ]

    랜덤 링크
    http://kldp.net


     Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
     Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum