3/25/2007

db2 prior to v8.2, gcc @ AIX

Just with ZhaoYong, configure gcc compiler for DB2 on AIX 5L।

we found the article in comments is very useful, but I just cannot find who the author is...

3 comments:

Yonghang Wang 说...

AIX
==================
IBM C for AIX V5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlc_r -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2"


IBM VisualAge C++ 5.0:

db2set DB2_SQLROUTINE_COMPILE_COMMAND="xlC_r -I$HOME/sqllib/include SQLROUTINE_FILENAME.C -bE:SQLROUTINE_FILENAME.exp -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2"


if register parameter DB2_SQLROUTINE_COMPILE_COMMAND is not defined,above is the default.

note:
for 64-bit application, use -q64 option for gcc.


IBM VisualAge C++ for AIX V5(VACBLD):
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"

在 vacbld 命令之后如果没有指定配置文件,DB2 将会在第一次尝试创建 SQL 过程时创建以下缺省配置文件:

$HOME/sqllib/function/routine/sqlproc.icc

为 DB2_SQLROUTINE_COMPILE_COMMAND 设置 DB2 注册表值时,可以指定自己的配置文件:

db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld $HOME/sqllib/function/sqlproc.icc"


==================
HP-UX
==================
要使用 HP C Compiler VB.11.11.02:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cc +u1 -Ae +z -D_POSIX_C_SOURCE=199506L -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; ld -b -lpthread -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o -L$HOME/sqllib/lib -ldb2"


要使用 HP aC++ VA.03.31:

db2set DB2_SQLROUTINE_COMPILE_COMMAND="aCC +u1 +z -ext -mt -I$HOME/sqllib/include SQLROUTINE_FILENAME.C -b -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2"


如果 DB2 注册表变量 DB2_SQLROUTINE_COMPILE_COMMAND 未设置,这将是缺省编译命令。

注意:
要在 HP-UX 上编译 64 位 SQL 过程,将 +DA2.0W 选项添加至上述命令。 2

==================
Linux
==================
要使用 GNU/Linux gcc:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cc -fpic -D_REENTRANT -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -shared -lpthread -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2"


要使用 GNU/Linux g++:

db2set DB2_SQLROUTINE_COMPILE_COMMAND="g++ -fpic -D_REENTRANT -I$HOME/sqllib/include SQLROUTINE_FILENAME.C -shared -lpthread -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2"

如果 DB2 注册表变量 DB2_SQLROUTINE_COMPILE_COMMAND 未设置,这将是缺省编译命令。

====================================
Solaris Operating Environment
====================================
要使用 Forte C V5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="cc -xarch=v8plusa -Kpic -mt -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -R$HOME/sqllib/lib -ldb2"


要使用 Forte C++ V5.0:

db2set DB2_SQLROUTINE_COMPILE_COMMAND="CC -xarch=v8plusa -Kpic -mt -I$HOME/sqllib/include SQLROUTINE_FILENAME.C -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -R$HOME/sqllib/lib -ldb2"


如果 DB2 注册表变量 DB2_SQLROUTINE_COMPILE_COMMAND 未设置,这将是缺省编译命令。

注:

编译器选项 -xarch=v8plusa 已添加到缺省的编译器命令以避免这样一个问题:链接 libdb2.so 时无法产生有效的可执行文件。
要编译 Solaris 上的 64 位 SQL 过程,应将 -xarch=v8plusa 选项去掉并添加 -xarch=v9 到上述命令。



如何在AIX操作系统上配置使用gcc编译器编译DB2存储过程?

解答:
在AIX操作系统上配置使用gcc编译器编译DB2存储过程,需要首先下载并安装一个适合您的操作系统版本的gcc编译器,AIX操作系统下gcc编译器的下载地址为:
http://www-1.ibm.com/servers/aix/products/aixos/linux/date.html。

然后根据DB2实例为32位还是64位分别设置不同的DB2注册表变量。

对于32位实例,需要使用db2set命令设置DB2_SQLROUTINE_COMPILE_COMMAND注册表变量如下:
DB2_SQLROUTINE_COMPILE_COMMAND=gcc -g -I/home/biyj/sqllib/include SQLROUTINE_FILENAME.c -o SQLROUTINE_FILENAME -L/home/biyj/sqllib/lib -ldb2 -shared

对于64位实例,需要使用db2set命令设置DB2_SQLROUTINE_COMPILE_COMMAND注册表变量如下:
DB2_SQLROUTINE_COMPILE_COMMAND=gcc -g -maix64 -I/home/biyj/sqllib/include SQLROUTINE_FILENAME.c -o SQLROUTINE_FILENAME -L/home/biyj/sqllib/lib -ldb2 -shared

其中选项maix64指定编译AIX 64位应用程序。
设置完DB2注册表变量后,使用db2 terminate命令终止当前的DB2回话,重新连接到数据库就可以使用gcc编译器编译你的存储过程了。

匿名 说...

ok

匿名 说...

useful. but I can only get the topics in english.