c语言bnd文件,Unix环境下嵌入式C程序编译

A.预编译部分

1.预编译DB2篇

1.1 什么是DB2预编译

在我们用C语言编写访问DB2的程序过程中,需要用到嵌入式SQL,其作用是将DB2 SQL混入一般C程序中, DB2预编译器可以将SQL语法直接转换为DB2行时服务应用程序编程接口(API)调用。

1.2 什么是bind

这是DB2 prep要做的事情,即把SQC中的SQL语句变为DB2数据库可认的API。bind的作用主要是根据你SQC中的SQL语句使用的表和操作指定一个访问时DB要使用的策略,是一种优化作用,加快数据访问的速度;当然也可以不bind,那样,访问的过程策略是在访问时才有的,速度会受很大的影响,特别是并发访问。

2.预编译命令

2.1 db2 prep .sqc文件 bindfile 其中bindfile参数作用是生成和sqc文件同名的.bnd文件

例: db2 prep /export/home/shwhome/sqc/CON_DB2.sqc bindfile 如果编译正常完成,则在.sqc文件同目录下会生成CON_DB2.c和CON_DB2.bnd文件

2.2 bind .bnd文件

例: db2 bind /export/home/shwhome/sqc/CON_DB2.bnd

因为是DB2的预编译命令,使用的是DB2的预编译器,所以以上两条命令需要在连接DB2数据库的情况下才可以使用

B.嵌入式部分

1.嵌入式C程序的编译

我们采用GCC来编译C程序,GCC的一般编译命令请参考文档中的相关说明,这里具体说明在目前环境下编译C程序的注意点。

1.1 编译C程序

gcc -m64 -c -I/export/home/shwhome/inc -o /export/home/shwhome/obj/testdb.o /export/home/shwhome/src/testdb.c

参数说明

-m64: 在64位服务器上编译时采用,这里为了将所有的编译后的目标文件统一,所以都加上-m64,如果再之后引用目标文件没有采用-m64编译则在最后编译时会出现ELF CLASS32(或ELF CLASS64)错误. -C: 只编译并生成目标文件,不做链接。

1.2 编译SQC文件生成的.C文件

gcc -m64 -c -I/export/home/shwhome/inc -I/export/home/aix/sqllib/include -L/usr/include/lib -o /export/home/shwhome/obj/CON_DB2.o /export/home/shwhome/sqc/CON_DB2.c

参数说明

-I/export/home/aix/sqllib/include: 这个目录下主要使用到2个头文件:sqladef.h和sqlca.h,这个是DB2预编译包含的都文件,可以查看你用prep编译出来的与.sqc同名的.C文件,其中就包含这两个头文件。其中aix是DB2Instance用户,DB2安装后会将include路径复制到instance用户的环境变量中,再次创建instance后只要复制过来就可以,因为Instance用户还包含其他的环境设定,所以不要直接引用-I/opt/IBM/db2/V9.5/include/这个DB2的安装路径

-L/usr/include/lib: 这个目录是系统包含函数的库文件,是编写应用程序的时候使用的相当于API,也就是应用编程接口。

※ -I/usr/include和-L/usr/include/lib是将usr/include下的函数作为头文件包括进来,并且将程序链接到库文件,这个例子中没有用到,但是如果保险的话,在编译时最好加上这两个选项。

1.3 将两个目标文件(主体C程序和嵌入式SQL)编译成可执行程序

gcc -m64 -ldb2 -lc -o /export/home/shwhome/bin/testdb /export/home/shwhome/obj/CON_DB2.o /export/home/shwhome/obj/testdb.o

参数说明

-ldb2: 链接DB2库文件。在SQC程序编译时必须链接libdb2.so库,其路径是/usr/lib/krb5/libdb2.so,之所以写成-ldb2,是在使用-l时,将库名的lib和后缀都去除,即库名是db2。以上命令是引用/export/home/shwhome/obj/CON_DB2.o /export/home/shwhome/obj/testdb.o这两个目标文件,编译后生成testdb,放在路径/export/home/shwhome/bin下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值