프린트 하기

OS환경 : Oracle Linux 7.6 (64bit)


DB 환경 : PostgreSQL 10, PostGIS 2.5.3


에러 : oracle_utils.c:22:17: fatal error: oci.h: No such file or directory

oracle_fdw extension 을 위해 make 작업 중 해당 에러 발생

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# tar -xvf oracle_fdw-ORACLE_FDW_2_1_0.tar.gz
# cd oracle_fdw-ORACLE_FDW_2_1_0/
# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels 
-Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard 
-O2 --pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 
-grecord-gcc-switches -m64 -mtune=generic -fPIC -I/sdk/include -I/oci/include -I/rdbms/public 
-I/usr/include/oracle/12.2/client -I/usr/include/oracle/12.2/client64 -I/usr/include/oracle/12.1/client 
-I/usr/include/oracle/12.1/client64 -I/usr/include/oracle/11.2/client -I/usr/include/oracle/11.2/client64 
-I/usr/include/oracle/11.1/client -I/usr/include/oracle/11.1/client64 -I/usr/include/oracle/10.2.0.5/client 
-I/usr/include/oracle/10.2.0.5/client64 -I/usr/include/oracle/10.2.0.4/client -I/usr/include/oracle/10.2.0.4/client64 
-I/usr/include/oracle/10.2.0.3/client -I/usr/include/oracle/10.2.0.3/client64 -I. -I./ -I/usr/pgsql-10/include/server 
-I/usr/pgsql-10/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  --o oracle_utils.o oracle_utils.c
oracle_utils.c:22:17: fatal error: oci.h: No such file or directory
 #include <oci.h>
                 ^
compilation terminated.



해결 방법 : LD_LIBRARY_PATH와 ORACLE_HOME을 설정해준다.

오라클 클라이언트가 설치되어 있어야 가능한데

instantclient-basic-linux.x64-11.2.0.4.0.zip

instantclient-sdk-linux.x64-11.2.0.4.0.zip

이렇게 basic 버전와 sdk 버전이 같이 압축해제되어 있어야함



압축을 푼 경로가 /root/instantclient_11_2 라고 한다면

root 계정의 .bash_profile 에 아래와 같이 적어줘야함

1
2
3
4
# cd
# vi .bash_profile
export LD_LIBRARY_PATH=/home/postgres/package/instantclient_11_2
export ORACLE_HOME=/root/instantclient_11_2



.bash_profile에 해당 내용 넣어준 뒤 make clean 후 다시 make 실행

1
2
3
4
5
6
7
8
9
# cd oracle_fdw-ORACLE_FDW_2_1_0/
# make clean
rm -f oracle_fdw.so   liboracle_fdw.a  liboracle_fdw.pc
rm -f oracle_fdw.o oracle_utils.o oracle_gis.o
rm -rf results/ regression.diffs regression.out tmp_check/ tmp_check_iso/ log/ output_iso/
# make
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 --pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -I/root/instantclient_11_2/sdk/include -I/root/instantclient_11_2/oci/include -I/root/instantclient_11_2/rdbms/public -I/usr/include/oracle/12.2/client -I/usr/include/oracle/12.2/client64 -I/usr/include/oracle/12.1/client -I/usr/include/oracle/12.1/client64 -I/usr/include/oracle/11.2/client -I/usr/include/oracle/11.2/client64 -I/usr/include/oracle/11.1/client -I/usr/include/oracle/11.1/client64 -I/usr/include/oracle/10.2.0.5/client -I/usr/include/oracle/10.2.0.5/client64 -I/usr/include/oracle/10.2.0.4/client -I/usr/include/oracle/10.2.0.4/client64 -I/usr/include/oracle/10.2.0.3/client -I/usr/include/oracle/10.2.0.3/client64 -I. -I./ -I/usr/pgsql-10/include/server -I/usr/pgsql-10/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o oracle_utils.o oracle_utils.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 --pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -I/root/instantclient_11_2/sdk/include -I/root/instantclient_11_2/oci/include -I/root/instantclient_11_2/rdbms/public -I/usr/include/oracle/12.2/client -I/usr/include/oracle/12.2/client64 -I/usr/include/oracle/12.1/client -I/usr/include/oracle/12.1/client64 -I/usr/include/oracle/11.2/client -I/usr/include/oracle/11.2/client64 -I/usr/include/oracle/11.1/client -I/usr/include/oracle/11.1/client64 -I/usr/include/oracle/10.2.0.5/client -I/usr/include/oracle/10.2.0.5/client64 -I/usr/include/oracle/10.2.0.4/client -I/usr/include/oracle/10.2.0.4/client64 -I/usr/include/oracle/10.2.0.3/client -I/usr/include/oracle/10.2.0.3/client64 -I. -I./ -I/usr/pgsql-10/include/server -I/usr/pgsql-10/include/internal  -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o oracle_gis.o oracle_gis.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 --pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC -shared -o oracle_fdw.so oracle_fdw.o oracle_utils.o oracle_gis.o -L/usr/pgsql-10/lib  -Wl,--as-needed  -L/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/usr/pgsql-10/lib',--enable-new-dtags  -L/root/instantclient_11_2 -L/root/instantclient_11_2/bin -L/root/instantclient_11_2/lib -lclntsh -L/usr/lib/oracle/12.2/client/lib -L/usr/lib/oracle/12.2/client64/lib -L/usr/lib/oracle/12.1/client/lib -L/usr/lib/oracle/12.1/client64/lib -L/usr/lib/oracle/11.2/client/lib -L/usr/lib/oracle/11.2/client64/lib -L/usr/lib/oracle/11.1/client/lib -L/usr/lib/oracle/11.1/client64/lib -L/usr/lib/oracle/10.2.0.5/client/lib -L/usr/lib/oracle/10.2.0.5/client64/lib -L/usr/lib/oracle/10.2.0.4/client/lib -L/usr/lib/oracle/10.2.0.4/client64/lib -L/usr/lib/oracle/10.2.0.3/client/lib -L/usr/lib/oracle/10.2.0.3/client64/lib



make 후 make install

1
2
3
4
5
6
7
8
9
# make install
/bin/mkdir -'/usr/pgsql-10/lib'
/bin/mkdir -'/usr/pgsql-10/share/extension'
/bin/mkdir -'/usr/pgsql-10/share/extension'
/bin/mkdir -'/usr/pgsql-10/doc/extension'
/bin/install --755  oracle_fdw.so '/usr/pgsql-10/lib/oracle_fdw.so'
/bin/install --644 .//oracle_fdw.control '/usr/pgsql-10/share/extension/'
/bin/install --644 .//oracle_fdw--1.1.sql .//oracle_fdw--1.0--1.1.sql  '/usr/pgsql-10/share/extension/'
/bin/install --644 .//README.oracle_fdw '/usr/pgsql-10/doc/extension/'

정상적으로 실행됨



postgre 접속 후 extension 생성

1
2
3
4
5
6
$ psql
psql (10.10)
Type "help" for help.
 
post=create extension oracle_fdw;
CREATE EXTENSION

정상적으로 생성됨



원인 : LD_LIBRARY_PATH와 ORACLE_HOME이 지정되어 있지 않아서 발생한 문제




참조 : https://dbtut.com/index.php/2018/11/21/oracle_fdw-oracle_utils-c2217-fatal-error-oci-h-no-such-file-or-directory/