Oracle8 Administrator's Reference for LINUX Release 8.0.5 A66585-01 |
|
¿À¶óŬ Àü󸮱â´Â °í±Þ ¾ð¾î·Î ¾²¿©Áø ÇÁ·Î±×·¥µé°ú ¿À¶óŬ µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ SQL¸í·É¹®À» °áÇÕ½ÃŰ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ¼³°èÇÏ´Â ÅøÀÌ´Ù. ¿À¶óŬ Àü󸮱â´Â ANSI SQL°ú ȣȯµÈ´Ù. ±×¸®°í ¿À¶óŬ8¿¡¼ ½ÇÇàµÇ´Â °³¹æÇü, ¸ÂÃãÇü ¾îÇø®ÄÉÀÌ¼Ç ¶Ç´Â ´Ù¸¥ ANSI SQL DBMS¸¦ °³¹ßÇϴµ¥ ¾²ÀδÙ.
¸ðµç Àü󸮱⠽ÇÇàÆÄÀÏÀº makefile Áï, $ORACLE_HOME/precomp/lib/ins_precomp.mk
¸¦ ÀÌ¿ëÇÏ¿© Relink µÈ´Ù. make
¸í·É¾î´Â ´ÙÀ½ ¹æ½ÄÀ¸·Î »ç¿ëÇÑ´Ù.
$ make -f ins_precomp.mk relink EXENAME=executable
ÀÌ ¸í·É¾î´Â $ORACLE_HOME/precomp/lib
µð·ºÅ丮¿¡¼ »õ·Î¿î ½ÇÇàÆÄÀÏÀ» ¸¸µé¾î ³¾ °ÍÀÌ´Ù. ±× ´ÙÀ½¿¡ $ORACLE_HOME/bin
µð·ºÅ丮·Î ±×°ÍÀ» ¿Å±ä´Ù. ±×°ÍÀ» $ORACLE_HOME/bin
·Î ¿Å±âÁö ¾Ê°í »õ·Î¿î ½ÇÇàÆÄÀÏÀ» ¸¸µé·Á¸é, ´ÙÀ½ ¸í·É¾î¸¦ ÀÌ¿ëÇÑ´Ù:
$ make -f ins_precomp.mk executable
¿©±â¼ »ç¿ëÇÏ´Â Á¦Ç°¿¡ µû¶ó ½ÇÇàÆÄÀÏÀÇ À̸§Àº Talbe 5-1·Î ºÎÅÍ °áÁ¤µÉ ¼ö ÀÖ´Ù.
Á¦Ç° | ½ÇÇàÆÄÀÏ |
---|---|
Pro*C/C++ |
|
Object Type Translator |
|
¿¹¸¦ µé¾î, Pro*C/C++ ½ÇÇàÆÄÀÏÀ» relinkÇϱâ À§Çؼ, ´ÙÀ½ ¸í·É¾î¸¦ ÀÌ¿ëÇÑ´Ù:
$ cd $ORACLE_HOME/precomp/lib $ make -f ins_precomp.mk relink EXENAME=proc
$ORACLE_HOME/precomp/admin
¿¡´Â ¿©¼¸ °³ÀÇ .cfg
½Ã½ºÅÛ ¼³Á¤ ÆÄÀϵéÀÌ µé¾îÀÖ´Ù. À̵éÀº Table 5-2¿¡ ¼³¸íµÇ¾î ÀÖ´Ù.
Á¦Ç° | ¼³Á¤ÆÄÀÏ |
---|---|
Pro*C/C++ |
|
Object Type Translator |
|
C ÀÌ¿ÜÀÇ ¾ð¾î¿¡¼, ¿©·¯ºÐµéÀÌ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯´Â ´ë¹®ÀÚ·Î µÈ ÇÔ¼ö ¶Ç´Â ºÎÇÁ·Î±×·¥(subprogram)ÀÇ À̸§À» ¼Ò¹®ÀÚ·Î º¯È¯ÇÑ´Ù. À̰ÍÀº "No such user exit" ¿¡·¯ÀÇ ¿øÀÎÀÌ µÈ´Ù. ÀÌ·¸ÇÑ °æ¿ì ¿©·¯ºÐµéÀÇ ¿É¼ÇÆÄÀÏ¿¡ ÀÖ´Â ÇÔ¼ö ¶Ç´Â ºÎÇÁ·Î±×·¥ÀÇ À̸§°ú iapxtb
Å×À̺íÀÇ °ÍÀ» ´ë¼Ò¹®ÀÚ¸¦ ºñ±³Çؼ È®ÀÎÇØ º»´Ù.
Àü󸮱â¿Í ¾÷ÀÚµéÀÌ °ø±ÞÇÏ´Â µð¹ö°Å(debugger)µéÀº ¾Æ¸¶ ȣȯÀÌ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¿À¶óŬ»ç´Â µð¹ö°ÅÇÏ¿¡¼ ½ÇÇàµÇ´Â ¾î¶² ÇÁ·Î±×·¥ÀÌ ¿î¿µÃ¼Á¦ÇÏ¿¡¼µµ °°Àº ¹æ¹ýÀ¸·Î ½ÇÇàµÉ °ÍÀ̶ó´Â °ÍÀ» º¸ÁõÇÏÁö ¾Ê´Â´Ù.
The ireclen
°ú oreclen
º¯¼öµéÀº ÃÖ´ë°ªÀ» °¡Áö°í ÀÖÁö ¾Ê´Ù.
´ÙÀ½ ¹®¼µéÀº Àü󸮱â¿Í ÀÎÅÍÆäÀ̽º Ư¡¿¡ ´ëÇÏ¿© Ãß°¡ÀûÀÎ Á¤º¸¸¦ Á¦°øÇÑ´Ù:
Pro*C/C++ release 8.0.5¿¡ °üÇÑ Ãß°¡ÀûÀÎ Á¤º¸¸¦ À§Çؼ´Â, $ORACLE_HOME/precomp/doc/proc2/readme.doc
¿¡ ÀÖ´Â README
ÆÄÀÏÀ» ÂüÁ¶Ç϶ó.
Pro*C/C++ ½Ã½ºÅÛ ¼³Á¤ ÆÄÀÏÀº $ORACLE_HOME/precomp/admin/pcscfg.cfg
ÀÌ´Ù.
Pro*C/C++À» »ç¿ëÇϴµ¥ ¾Õ¼, ¿î¿µÃ¼Á¦ÀÇ Á¤È®ÇÑ ¹öÀü¿¡ ¸Â´Â ÄÄÆÄÀÏ·¯°¡ ¿Ã¹Ù¸£°Ô ¼³Ä¡µÇ¾ú´ÂÁö È®ÀÎÇØ¶ó. ¿ä±¸µÇ´Â ¿î¿µÃ¼°èÀÇ ¹öÀüÀº Oracle8 Installation Guide for LINUXÀÇ Chapter1¿¡ ±â¼úµÇ¾î ÀÖ´Ù.
Pro*C/C++ÀÇ ´Ù¾çÇÑ ±â´ÉÀ» º¸¿©ÁÖ±â À§ÇÑ Demo ÇÁ·Î±×·¥µéÀÌ µÇ¾î ÀÖ´Ù. 3°¡Áö Á¾·ùÀÇ Demo ÇÁ·Î±×·¥µéÀÌ ÀÖ´Ù: C, C++ ±×¸®°í Object Program - ÈÄÀÚ´Â Oracle8ÀÇ °´Ã¼»ç¾çÀ» º¸¿©ÁØ´Ù. ¸ðµç Demo ÇÁ·Î±×·¥µéÀº $ORACLE_HOME/precomp/demo/proc
¿¡ À§Ä¡ÇØ ÀÖ°í, ¸ðµç ÇÁ·Î±×·¥µéÀº ÆÐ½º¿öµå°¡ TIGERÀÎ SCOTT½ºÅ°¸¶ ¾È¿¡ Á¸ÀçÇÏ´Â $ORACLE_HOME/sqlplus/demo/demobld.sql
¿¡ ÀÇÇØ¼ Demo Å×À̺íÀÌ ¸¸µé¾îÁ³´Ù°í °¡Á¤ÇÑ´Ù.
SQL*Plus¿¡¼ »ç¿ëµÇ´Â Demo ÇÁ·Î±×·¥µéÀ» ¸¸µå´Â ´õ ³ªÀº Á¤º¸¸¦ ¾ò±â À§Çؼ´Â, ÀÌ Ã¥ÀÇ page 4-3¿¡ ÀÖ´Â "Demonstration Tables" À» º¸¸é µÈ´Ù. Demo ÇÁ·Î±×·¥µé¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ Á¤º¸´Â Programmer's Guide to the Pro*C/C++ Precompiler ¸¦ ÂüÁ¶Ç϶ó.
$ORACLE_HOME/precomp/demo/proc/demo_proc.mk
¶ó´Â makefileÀº Demo ÇÁ·Î±×·¥µéÀ» ¸¸µå´Âµ¥ »ç¿ëµÇ¾î¾ß¸¸ ÇÑ´Ù. ¿¹¸¦µé¾î, sample1
Demo ÇÁ·Î±×·¥À» ÇÁ¸®ÄÄÆÄÀÏ, ÄÄÆÄÀÏ ¶Ç´Â link Çϱâ À§Çؼ´Â ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù.
$ make -f demo_proc.mk sample1
´Ù¸¥ ¹æ¹ýÀ¸·Î ´ÙÀ½ ¸í·É¾î¸¦ ÀÌ¿ëÇÒ ¼ö Àִµ¥, Á»´õ ¸íÈ®ÇÑ ¹®¹ýÀ» »ç¿ëÇØ¾ß¸¸ÀÌ Á¤È®È÷ °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.
$ make -f demo_proc.mk build OBJS=sample1.o EXE=sample1
±âº»ÀûÀ¸·Î ¸ðµç ÇÁ·Î±×·¥µéÀº $ORACLE_HOME/lib/libclntsh.so
¶ó´Â Ŭ¶óÀÌ¾ðÆ® °øÀ¯ ¶óÀ̺귯¸®¿Í µ¿ÀûÀ¸·Î link µÇ¾î ÀÖ´Ù.
Pro*C/C++ÀÇ ¸ðµç C Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé±â À§Çؼ, ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù:
$ make -f demo_proc.mk samples
Pro*C/C++ÀÇ ¸ðµç C++ Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé±â À§Çؼ, ÀÌ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù:
$ make -f demo_proc.mk cppsamples
Pro*C/C++ÀÇ ¸ðµç Object Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé±â À§Çؼ, ´ÙÀ½ ¸í·É¾î¸¦ »ç¿ëÇÑ´Ù:
$ make -f demo_proc.mk object_samples
ÀϺΠDemo ÇÁ·Î±×·¥µéÀ» ½ÇÇàÇϱâ À§Çؼ´Â $ORACLE_HOME/precomp/demo/sql
¿¡ ÀÖ´Â SQL ½ºÅ©¸³Æ®¸¦ ¿ä±¸ÇÑ´Ù. ÀÌ·± Demo ÇÁ·Î±×·¥À» ¸¸µé°í, ÇØ´ç SQL script¸¦ ½ÇÇàÇϱâ À§Çؼ´Â make
¸ÅÅ©·Î ÀÎÀÚ RUNSQL=run
À» ¸íÇüÇà¿¡ Æ÷ÇÔ½ÃÄÑ Áà¾ß¸¸ ÇÑ´Ù. ¿¹¸¦ µé¸é, calldemo
Demo ÇÁ·Î±×·¥À» »ý¼ºÇÏ°í ½ÇÇàÇϱâ À§Çؼ´Â $ORACLE_HOME/precomp/demo/sql/calldemo.sql
¶ó´Â ½ºÅ©¸³Æ®°¡ ÇÊ¿äÇÏ´Ù. ´ÙÀ½°ú °°ÀÌ ¸íÇüÀ» ÀÔ·ÂÇÑ´Ù:
$ make -f demo_proc.mk calldemo RUNSQL=run
´Ù¸¥ ¿¹·Î, ¸ðµç Object Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé°í ½ÇÇàÇϱâ À§Çؼ´Â ÇØ´ç SQL ½ºÅ©¸³Æ®¸¦ ÀüºÎ ÇÊ¿ä·Î ÇÑ´Ù. ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù.
$ make -f demo_proc.mk object_samples RUNSQL=run
ÇÊ¿äÇÏ´Ù¸é SQL ½ºÅ©¸³Æ®¸¦ ¼öµ¿À¸·Î ½ÇÇàÇÒ ¼öµµ ÀÖ´Ù.
$ORACLE_HOME/precomp/demo/proc/demo_proc.mk
¶ó´Â makefileÀº »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀ» ¸¸µå´Âµ¥ »ç¿ëµÈ´Ù. demo_proc.mk
¿Í »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀ» link Çϱâ À§ÇÑ ÀϹÝÀûÀÎ ¹®¹ýÀº ´ÙÀ½°ú °°´Ù:
$ make -f demo_proc.mk target OBJS="objfile1 objfile2 ..." \
EXE=exename
¿¹¸¦ µé¾î, Pro*C/C++ ¼Ò½ºÀÎ myprog.pc
·Î ºÎÅÍ myprog
ÇÁ·Î±×·¥À» ¸¸µé±â À§Çؼ´Â ¼Ò½º¿Í ¿øÇÏ´Â ½ÇÇàÆÄÀÏÀÇ ÇüÅ¿¡ µû¶ó ´ÙÀ½ ¸í·É¾î Áß Çϳª¸¦ ÀÌ¿ëÇÑ´Ù.
C ¼Ò½º¸¦ Ŭ¶óÀÌ¾ðÆ® °øÀ¯ ¶óÀ̺귯¸®¿Í µ¿ÀûÀ¸·Î link ÇÑ´Ù:
$ make -f demo_proc.mk build OBJS=myprog.o EXE=myprog
C ¼Ò½º¿¡¼ Á¤ÀûÀ¸·Î link ÇÑ´Ù:
$ make -f demo_proc.mk build_static OBJS=myprog.o EXE=myprog
C++¼Ò½º¸¦ client shared library¿Í µ¿ÀûÀ¸·Î linkÇÑ´Ù:
$ make -f demo_proc.mk cppbuild OBJS=myprog.o EXE=myprog
C++¼Ò½º¸¦ Á¤Àû link ÇÑ´Ù:
$ make -f demo_proc.mk cppbuild_static OBJS=myprog.o EXE=myprog
¸®´ª½º¿¡¼ °øÀ¯ ¶óÀ̺귯¸® »ç¿ë¿¡ °üÇÑ ¹®Á¦´Â LINUX ¹®¼¸¦ Âü°íÇÑ´Ù.
Oracle Call Interface (OCI)¸¦ »ç¿ëÇϱâ Àü¿¡, ÄÄÆÄÀÏ·¯°¡ ÀûÀýÇÏ°Ô ¼³Ä¡µÇ¾ú´ÂÁö Á¤È®ÇÑ ¹öÁ¯À» È®ÀÎÇ϶ó. ¿©·¯ºÐµéÀÇ ¿î¿µÃ¼Á¦¿¡ µû¶ó ¿ä±¸µÇ´Â ¹öÀüÀº Oracle8 Installation Guide for LINUX ÀÇ Chapter 1¿¡ ¸í½ÃµÇ¾î ÀÖ´Ù.
OCIÀÇ ´Ù¾çÇÑ ±â´ÉÀ» º¸¿©ÁÖ´Â Demo ÇÁ·Î±×·¥µéÀÌ Á¦°øµÈ´Ù. Demo ÇÁ·Î±×·¥µéÀº C, C++ 2°¡Áö Á¾·ù·Î ÁغñµÇ¾î ÀÖ´Ù. ¸ðµç Demo ÇÁ·Î±×·¥µéÀº $ORACLE_HOME/rdbms/demo
¿¡ À§Ä¡ÇØ ÀÖ´Ù. ´ëºÎºÐÀÇ Demo ÇÁ·Î±×·¥µéÀº ÆÐ½º¿öµå°¡ TIGERÀÎ SCOTT½ºÅ°¸¶ ¾È¿¡ Á¸ÀçÇÏ´Â $ORACLE_HOME/sqlplus/demo/demobld.sql
¿¡ ÀÇÇØ¼ Demo Å×À̺íÀÌ ¸¸µé¾îÁ³´Ù°í °¡Á¤ÇÑ´Ù.
SQL*Plus¿¡¼ »ç¿ëµÇ´Â Demo ÇÁ·Î±×·¥µéÀ» ¸¸µå´Â º¸´Ù ÀÚ¼¼ÇÑ Á¤º¸¸¦ ¾ò±â À§Çؼ´Â, ÀÌ Ã¥ÀÇ page 4-3¿¡ ÀÖ´Â "Demonstration Tables"À» º¸¸é µÈ´Ù.
Demo ÇÁ·Î±×·¥¿¡ ´ëÇÑ º¸´Ù ÀÚ¼¼ÇÑ Á¤º¸´Â Programmer's Guide to the Oracle Call Interface¿Í ´Ù¸¥ ÇÁ·Î±×·¥ÀÇ ¼¼ºÎÇ׸ñ ÇÁ·Î±×·¥ ¼Ò½º¸¦ º¸¸é µÈ´Ù.
µ¥¸ð ÇÁ·Î±×·¥À» ¸¸µé±â À§ÇØ $ORACLE_HOME/rdbms/demo/demo_rdbms.mk
makefileÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. ¿¹¸¦ µé¾î, cdemo1
µ¥¸ð ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇϰí, link Çϱâ À§Çؼ´Â ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù:
$ make -f demo_rdbms.mk cdemo1
´Ù¸¥ ¹æ¹ýÀ¸·Î, ´ÙÀ½ ¸í·É¾î¸¦ ÀÌ¿ëÇϼö µµ ÀÖ´Ù. À̰ÍÀº Á»´õ ¸íÈ®ÇÑ ¹®¹ýÀ¸·Î ±â¼úÇØ Áà¾ß¸¸ÀÌ Á¤È®È÷ °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù:
$ make -f demo_rdbms.mk build OBJS=cdemo1.o EXE=cdemo1
±âº»ÀûÀ¸·Î ¸ðµç ÇÁ·Î±×·¥µéÀº $ORACLE_HOME/lib/libclntsh.so
client shared library¿Í µ¿ÀûÀ¸·Î linkµÇ¾îÀÖ´Ù.
¸ðµç OCI C Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé±â À§Çؼ´Â ´ÙÀ½ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù:
$ make -f demo_rdbms.mk demos
¸ðµç OCI C++ Demo ÇÁ·Î±×·¥µéÀ» ¸¸µé±â À§Çؼ´Â ÀÌ ¸í·É¾î¸¦ ÀÔ·ÂÇÑ´Ù:
$ make -f demo_rdbms.mk c++demos
¾î¶² Demo ÇÁ·Î±×·¥µéÀº ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ±â Àü¿¡ ¼öµ¿À¸·Î ½ÇÇà½Ã۱â À§Çؼ $ORALCE_HOME/rdbms/demo
¿¡ ÀÖ´Â SQL ½ºÅ©¸³Æ®¸¦ ¿ä±¸ÇÑ´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡, SQL½ºÅ©¸³Æ® À̸§Àº ÇÁ·Î±×·¥ À̸§¿¡ .sql
ºÙÀΰͰú °°´Ù. ¿¹¸¦ µé¾î, oci02
ÇÁ·Î±×·¥ÀÇ SQL ½ºÅ©¸³Æ®´Â oci.02.sql
ÀÌ´Ù.
¾î¶°ÇÑ °æ¿ì¶óµµ SQL ½ºÅ©¸³Æ®°¡ ¿ä±¸µÇ¾îÁø´Ù°í °áÁ¤ÇÑ ÇÁ·Î±×·¥À» ½ÃÀÛÇÒ ¶§´Â ²ÀÁÖ¼®À» Àд´Ù.
$ORACLE_HOME/rdbms/demo/demo_rdbms.mk
makefileÀº »ç¿ëÀÚ ÇÁ·Î±×·¥À» ¸¸µå´Âµ¥ »ç¿ëµÈ´Ù. demo_rdbms.mk
°¡ »ç¿ëÀÚ ÇÁ·Î±×·¥À» linkÇÏ´Â ÀϹÝÀûÀÎ ¹®¹ýÀº:
$ make -f demo_rdbms.mk target OBJS="objfile1 objfile2 ..." \
EXE=exename
¿¹¸¦ µé¾î, myprog.c
C¾ð¾î ¼Ò½º·ÎºÎÅÍ myprog
ÇÁ·Î±×·¥À» ¸¸µé±â À§Çؼ´Â ¿ä±¸µÇ¾îÁö´Â ½ÇÇàÆÄÀÏÀÇ Å¸ÀÔ¿¡ µû¶ó¼ ´ÙÀ½ ¸í·É¾î Áß¿¡ Çϳª¸¦ »ç¿ëÇØ¾ß ÇÑ´Ù:
C ¼Ò½º°¡ client shared library¸¦ µ¿Àû link Çϱâ À§Çؼ:
$ make -f demo_rdbms.mk build OBJS=myprog.o EXE=myprog
C ¼Ò½º°¡ Á¤Àû link Çϱâ À§Çؼ:
$ make -f demo_rdbms.mk build_static OBJS=myprog.o EXE=myprog
myproc.cc C++
¼Ò½º·ÎºÎÅÍ myprog
ÇÁ·Î±×·¥À» ¸¸µé¶§:
C++ ¼Ò½º°¡ client shared library¸¦ µ¿Àû link Çϱâ À§Çؼ:
$ make -f demo_rdbms.mk buildc++ OBJS=myprog.o EXE=myprog
C++ ¼Ò½º°¡ Á¤Àû link Çϱâ À§Çؼ:
$ make -f demo_rdbms.mk buildc++_static OBJS=myprog.o EXE=myprog
Á¦°øµÈ demo_
product.mk
makefilesÀº À̹øÀåÀÇ Æ¯Â¡ÀûÀÎ Á¦Ç° ºÎºÐ¿¡¼ ¹¦»çµÇ¾î ÀÖ´Â »ç¿ëÀÚ ÇÁ·Î±×·¥µéÀ» linkÇÒ ¶§ »ç¿ëÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù. ¸¸¾à Á¦°øµÈ makefileÀ» º¯°æÇÏ´Â °ÍÀÌ ÇÊ¿äÇϰųª ¶Ç´Â »ç¿ëÀÚ°¡ ¸¸µç makefileÀ» »ç¿ëÇϱâ·Î Çß´Ù¸é ´ÙÀ½ Áö½Ã¿¡ µû¶ó¼ ÇÑ´Ù:
ddemo_
product.mk
makefile ÆÄÀÏÀ» »ç¿ëÇÑ´Ù.
ÇÁ·Î±×·¥À» linkÇÒ ¶§ ÀϹÝÀûÀÎ ¿¡·¯´Â Á¤ÀǵÇÁö ¾Ê´Â symbolµé ¶§¹®ÀÌ´Ù. À̰ÍÀº ´ÙÀ½°ú ºñ½ÁÇÏ´Ù:
$ make -f demo_proc.mk sample1 Undefined first referenced symbol in file sqlcex sample1.o sqlglm sample1.o ld: fatal: Symbol referencing errors. No output written to sample1
ÀÌ ¿¡·¯´Â linker°¡ ÂüÁ¶µÇ´Â symbolÀ» À§ÇÑ Á¤ÀǸ¦ ãÁö ¸øÇßÀ» ¶§ ÀϾÙ. ÀϹÝÀûÀ¸·Î ÀÌ·± Á¾·ùÀÇ ¹®Á¦¸¦ À§ÇÑ ÇØ°áÃ¥Àº Á¤Àǰ¡ Æ÷ÇԵǾî ÀÖ´Â link lineÀÌ Á¸ÀçÇÏ´Â ¶óÀ̺귯¸® ¶Ç´Â object ÆÄÀÏÀ» È®½ÇÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù. ±×¸®°í linker´Â ÆÄÀÏÀÌ µé¾îÀÖ´Â ±× µð·ºÅ丮¿¡¼ ãÀ» ¼ö ÀÖ´Ù.
¿À¶óŬÀº ½Éº¼ÀÌ Á¤ÀǵǾî ÀÖ´Â °÷¿¡ ¶óÀ̺귯¸® ¶Ç´Â objectÆÄÀÏÀÌ À§Ä¡ÇÏ´Â °ÍÀ» µ½±â À§Çؼ symfind
¸¦ È£ÃâÇÏ´Â À¯Æ¿¸®Æ¼¸¦ Á¦°øÇÑ´Ù. ¿©±â¿¡ sqlcex
symbolÀÌ À§Ä¡ÇÑ °÷¿¡ symfind
ÀÇ °á°ú ¿¹Á¦°¡ ÀÖ´Ù:
$ symfind sqlcex SymFind - Find Symbol <sqlcex> in <**>.a, .o, .so ------------------------------------------------------ Command: /u01/app/oracle/product/8.0.5/bin/symfind sqlcex Local Directory: /u01/app/oracle/product/8.0.5 Output File: (none) Note: I do not traverse symbolic links Use '-v' option to show any symbolic links Locating Archive and Object files ... [11645] | 467572| 44|FUNC |GLOB |0 |8 |sqlcex ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libclntsh.so [35] | 0| 44|FUNC |GLOB |0 |5 |sqlcex ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libsql.a
¿À¶óŬ ¶óÀ̺귯¸®´Â À̹ø ¸±¸®ÀÌÁî¿¡¼ ¾ÈÁ¤µÇ°í, ´ÙÁß ½º·¹µå ¾îÇø®ÄÉÀ̼Ç(multi-threaded applications)À» Áö¿øÇÏ´Â ½º·¹µå¸¦ Áö¿øÇÑ´Ù.
ÇÁ¸®ÄÄÆÄÀÏ·¯¿Í OCI ¾îÇø®ÄÉÀ̼ǵéÀº Á¤Àû, µ¿Àû ¶óÀ̺귯¸®µé°ú link ÇÒ ¼ö ÀÖ´Ù. Á¤Àû linkÀÇ °æ¿ì¿¡´Â, ¸ðµç ¾îÇø®ÄÉÀ̼ÇÀÇ ¶óÀ̺귯¸®µé°ú objectµéÀÌ ÇϳªÀÇ ½ÇÇà ÇÁ·Î±×·¥¾È¿¡ ÇÔ²² link µÇ¾î ÀÖ´Ù. °á°úÀûÀ¸·Î, ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇàÆÄÀϵéÀº »ó´çÈ÷ Å©°Ô µÉ ¼ö ÀÖ´Ù.
µ¿Àû linkÀÇ °æ¿ì¿¡´Â, ½ÇÇà ÇÁ·Î±×·¥ ¾È¿¡ ¼öÇà Äڵ尡 ºÎºÐÀûÀ¸·Î´Â ½ÇÇà ÇÁ·Î±×·¥¾È¿¡ Á¸ÀçÇÑ´Ù. ±×¸®°í ½ÇÇà½Ã(run-time)¿¡ µ¿Àû ¾îÇø®ÄÉÀ̼ǿ¡ ÀÇÇØ¼ link µÇ´Â ¶óÀ̺귯¸®µéµµ Á¸ÀçÇÑ´Ù. ½ÇÇà½Ã¿¡ link µÇ´Â ¶óÀ̺귯¸®µéÀº µ¿Àû ¶Ç´Â °øÀ¯ ¶óÀ̺귯¸®µéÀÌ´Ù. ¿©±â¿¡ µ¿Àû link ÀÇ Áß¿äÇÑ µÎ°¡Áö ÀÌÀÍÀ» ¼³¸íÇÑ´Ù:
¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®´Â $ORACLE_HOME/lib/libclntsh.so
¿¡ ÀÖ´Ù. ¸¸¾à ¿À¶óŬÀÌ ¾îÇø®ÄÉÀ̼ÇÀ» linkÇϱâ À§Çؼ »ç¿ëÇÏ´Â demo_
product.mk
makefileÀ» Á¦°øÇÑ´Ù¸é, ¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®´Â ±âº»ÀûÀ¸·Î »ç¿ëµÇ¾îÁø´Ù.
ÇÁ·Î¼¼½º°¡ ½ÃÀ۵ǾúÀ» ¶§ ½ÇÇà½Ã ·Î´õ(runtime loader)°¡ ¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®¸¦ ãÀ»¼ö ÀÖµµ°Ô Çϱâ À§Çؼ LD_LIBRARY_PATH ¿¡ ȯ°æº¯¼ö¸¦ ¼¼ÆÃÇÏ´Â °ÍÀÌ ÇÊ¿äÇÏ´Ù. ¸¸¾à ½ÇÇàÆÄÀÏÀ» ½ÃÀÛÇßÀ» ¶§ ´ÙÀ½°ú °°Àº ¿¡·¯°¡ ³µ´Ù¸é, LD_LIBRARY_PATH°¡ ¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®°¡ Á¸ÀçÇÏ´Â µð·ºÅ丮¿¡ ¼¼ÆÃµÇ¾î ÀÖ¾î¾ß¸¸ ÇÑ´Ù.
% sample1 ld.so.1: sample1: fatal: libclntsh.so.1.0: can't open file: errno=2 Killed
LD_LIBRARY_PATHÀº ´ÙÀ½°ú °°ÀÌ ¼¼ÆÃÇÑ´Ù:
% setenv LD_LIBRARY_PATH $ORACLE_HOME/lib
¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®´Â ÀνºÅçÇÏ´Â µ¿¾È¿¡ ÀÚµ¿À¸·Î ¸¸µé¾îÁø´Ù. ¸¸¾à ¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®¸¦ ´Ù½Ã ¸¸µé Çʿ䰡 ÀÖ´Ù¸é, SQL*Plus³ª Recovery Manager¿Í °°Àº ¸ðµç ¿À¶óŬ Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ǵéÀ» Æ÷ÇÔÇÑ ¿À¶óŬ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϰí ÀÖ´Â ¸ðµç Ŭ¶óÀÌ¾ðÆ® ¾îÇø®ÄÉÀ̼ǵéÀ» Á¾·áÇϰí, oracle·Î ·Î±×ÀÎ ÇÑ ÈÄ¿¡ ´ÙÀ½ ¸í·É¾î¸¦ ½ÇÇà½ÃŲ´Ù.
% cd $ORACLE_HOME/rdbms/lib % make -f ins_rdbms.mk client_sharedlib
ÀÌ ºÎºÐÀº ¿À¶óŬ8ÀÌ µÎ ÀÛ¾÷°£ÀÇ Åë½Å(two-task communication)¿¡ »ç¿ëÇÏ´Â ½Ã±×³ÎÀ» ¼³¸íÇÑ´Ù. ±×¸®°í signal handler¸¦ ¾î¶»°Ô ¼Â¾÷ Çϴ°¡¸¦ ¼³¸íÇÑ´Ù.
SignalÀº ´ç½ÅÀÌ µ¥ÀÌÅͺ£À̽º¿¡ Á¢¼ÓÇÒ ¶§ ±×¸®°í Á¢¼Ó »óŰ¡ ¾Æ´Ñ »óÅ¿¡¼ ´Ù½Ã ÀνºÅçÇÒ ¶§ »ç¿ëÀÚ ÇÁ·Î¼¼½º¿¡ ÀνºÅçµÇ¾î ÀÖ´Ù.
¿À¶óŬ8Àº µÎ ÀÛ¾÷°£ÀÇ Åë½Å(two-task communication)À» À§Çؼ ´ÙÀ½ signalµéÀ» »ç¿ëÇÑ´Ù:
¸®½ºÆ®µÈ signalµéÀº Pro*C ¶Ç´Â ´Ù¸¥ Àü󸮱⠾îÇø®ÄÉÀ̼ǵ鿡 ¿µÇâÀ» ¹ÌÄ£´Ù. ´ç½ÅÀº ¿À¶óŬ ÇÁ·Î¼¼½º¿¡ Á¢¼ÓµÇ¾î ÀÖÀ» ¶§ SIGCLD
(¶Ç´Â SIGCHLD
) ±×¸®°í SIGPIPE
¸¦ À§ÇÑ ÇϳªÀÇ signal handler¸¦ ÀνºÅçÇÒ ¼ö ÀÖ´Ù. osnsui()
·çƾÀÌ ¼Â¾÷À» À§Çؼ È£ÃâµÇ´Â µ¿¾È SIGINT
¸¦ À§ÇÑ multiple signal handlerµéÀ» ¸¸µé ¼ö ÀÖ´Ù. ´ç½ÅÀº ¿øÇÒ ¶§ ´Ù¸¥ signalµéÀ» À§Çؼ ¸¹Àº signalµéÀ» ÀνºÅçÇÒ ¼ö ÀÖ´Ù. ¸¸¾à the oracle process Á¢¼ÓµÇ¾î ÀÖÁö ¾Ê´Ù¸é, multiple signal handler¸¦ ¸¸µé ¼ö ÀÖ´Ù.
´ÙÀ½ ¿¹Á¦´Â signal ·çƾ°ú catching ·çƾÀ» ¾î¶»°Ô ¼Â¾÷ÇÒ ¼ö ÀÖ´ÂÁö º¸¿©ÁØ´Ù. SIGINT
¿¡¼´Â signal-catching·çƾÀ» µî·ÏÇÏ°í »èÁ¦Çϱâ À§Çؼ osnsui()
¿Í osncui()¸¦ »ç¿ëÇÑ´Ù.
/* »ç¿ëÀÚ Ãø ÀÎÅÍ·´Æ® ¼¼ÆÃ */ word osnsui( /*_ word *handlp, void (*astp), char * ctx, _*/) /* ** osnsui: ¿î¿µÃ¼Á¦ ÀÇÁ¸ »ç¿ëÀÚÃø ÀÎÅÍ·´Æ® ³×Æ®¿öÅ© ¼¼ÆÃ ** ** handling procedure astp ÀÎÅÍ·´Æ®¸¦ ´õÇÑ´Ù. ** ** »ç¿ëÀÚ ÀÎÅÍ·´Æ®(^C¿Í °°Àº)°¡ ¹ß»ýÇÒ¶§¸¶´Ù ctx ÀÎÀÚ¿Í ÇÔ²² astp¸¦ È£ÃâÇÑ´Ù. ** ** ÀÌ handler¸¦ À§ÇÑ *handlp ÇÚµéÀ» ³Ö´Â´Ù. ±×·¡¼ osncui ¿Í ÇÔ²² Áö¿î´Ù. ** ** ¸¹Àº handlerµéÀÌ º¸ÀÏ °ÍÀÌ´Ù. ** »ç¿ëµÇ°í ÀÖ´Â osncui ´Â °¢°¢ Áö¿öÁ®¾ß ÇÑ´Ù. ** ¸¸¾à¿¡ ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¿¡·¯Äڵ带 ¸®ÅÏÇÑ´Ù. */ /* »ç¿ëÀÚ Ãø ÀÎÅÍ·´Æ® »èÁ¦ */ word osncui( /*_ word handle _*/ ); /* ** osncui : ¿î¿µÃ¼Á¦ ÀÇÁ¸ »ç¿ëÀÚÃø ÀÎÅÍ·´Æ® »èÁ¦ ** ** ¿°ÅµÈ handler¸¦ Áö¿î´Ù. ÀÎÀÚ´Â osnsui·ÎºÎÅÍ ¾ò¾îÁø handleÀÌ´Ù. ** ** aksdir ¿¡·¯°¡ ¹ß»ýÇÏ¸é ¿¡·¯Äڵ带 ¸®ÅÏÇÑ´Ù. */
´ÙÀ½Àº ¾îÇø®ÄÉÀÌ¼Ç ¾È¿¡¼ osnsui()
¿Í osncui()
¸¦ »ç¿ëÇϱâ À§ÇÑ ÅÛÇø´ÀÌ´Ù:
/* ** ÀÚ½ÅÀÇ »ç¿ëÀÚ ÀÎÅÍ·´Æ® handler. */ void sig_handler() { ... } main(argc, argv) int arc; char **argv; { int handle, err; ... /* ÀÚ½ÅÀÇ »ç¿ëÀÚ ÀÎÅÍ·´Æ® Çڵ鷯¸¦ ¼Â¾÷ÇÑ´Ù */ if (err = osnsui(&handle, sig_handler, (char *) 0)) { /* ¸¸¾à ¸®ÅϰªÀÌ 0ÀÌ ¾Æ´Ï¸é, ¿¡·¯°¡ ¹ß»ýÇÑ´Ù. ¾î¶² °ÍÀº ¿©±â¿¡ »ç¿ëÇÑ´Ù */ ... } ... /* ÀÚ½ÅÀÇ ÀÎÅÍ·´Æ® Çڵ鷯¸¦ Áö¿î´Ù */ if (err = osncui(handle)) { /* ¸¸¾à ¸®ÅϰªÀÌ 0ÀÌ ¾Æ´Ï¸é, ¾î¶² °ÍÀº ¿©±â¿¡ »ç¿ëÇÑ´Ù. */ ... } ...
}
XA ¾îÇø®ÄÉÀÌ¼Ç TP-¸ð´ÏÅ͸¦ ¸¸µé ¶§ ¿À¶óŬ Ŭ¶óÀÌ¾ðÆ® °øÀ¯ ¶óÀ̺귯¸®¿¡ ¾Õ¼ link line¿¡ À§Ä¡Çϰí ÀÖ´Â TP-¸ð´ÏÅÍ ¶óÀ̺귯¸®µé(ax_reg
¿Í ax_unreg
symbolÀ» Á¤ÀÇÇÑ)À» È®Á¤ÇÑ´Ù. ÀÌ linkÀÇ Á¦¾àÁ¶°ÇÀº ¿ÀÁ÷ XAÀÇ µ¿Àû µî·Ï(Oracle XA switch xaoswd
)¿¡ »ç¿ëµÉ ¶§ ¿ä±¸µÇ¾îÁø´Ù.
Oracle8 ¼¹ö´Â Oracle7 7.1.6 XAÀÇ È£Ãâ(»Ó¸¸¾Æ´Ï¶ó 7.3 XA È£Ãâ)À» Á¦°øÇÏÁö ¾Ê´Â´Ù. ±×·¯¹Ç·Î 7.1.6 XA È£ÃâÀ» »ç¿ëÇÏ´Â TP-¸ð´ÏÅÍ XA ¾îÇø®ÄÉÀ̼ÇÀº Oracle8 XA ¶óÀ̺귯¸®¿Í ÇÔ²² ´Ù½Ã link µÇ¾î¾ß¸¸ ÇÑ´Ù. Oracle8 XA È£ÃâÀº $ORACLE_HOME/lib/libclntsh.so
°øÀ¯ ¶óÀ̺귯¸®¿Í $ORACLE_HOME/lib/libclient.a
Á¤Àû ¶óÀ̺귯¸® ¸ðµÎ¿¡¼ Á¤ÀǵǾîÁø´Ù.