我使用的OCI编译环境, 基于Visual C++ 6.0

    以前常用Java来写工具, 后来觉得Java要还一个JRE, 有些不爽的地方, 也存在性能问题. 由于在Java程序上积累了一些经验, 转到C来写一些小工具也不是难事, 他们两者语法基本相同. 况且写工具时编译代码只占用了很小的时间, 大部分时间在想应当具有什么功能?

    我写OCI的环境很小, 基本的编译环境是从VC6中拷出一些最基本的文件, 加上OCI的头文件和库文件构成的, 压缩后不到4M, 你可以下载并解压到C盘, 但不支持C++了.

    接下来需要设置两个环境变量, 指定默认的头文件(.H)的位置和默认的库文件(.LIB)的位置, 如下所示:

INCLUDE=c:\vc6\include
LIB=c:\vc6\lib

    接下来将Bin目录加到PATH变量中, 你就可以用下面的语法来编译OCI程序了. 如下所示:

cl /ML ociuldr.c oci.lib

    这样就编译成了我网站上提供的ociuldr工具了, Microsoft不会来追究我非法传播VC6吧?

留言 (10)

Linux or Unix with gcc:

gcc -m32 -I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public -L${ORACLE_HOME}/lib32 -ldl -o ociuldr.bin coldiff.c -lm -lclntsh

64位io的编译选项(Linux/Unix)

-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64

请问,em64的cpu是不是不能按照文章中(windows下)的方法编译?

32位的机器上编过去了

我没有em64的机器, 不过em64的技术只是在寻址上变成了48位, 而cpu事实上还是一样的, 应当可以的吧.

可以的,但是环境变量没有用了。(用64位会不会把全世界的存储都寻址到了?)。我是把*.lib放到bin下面编的。我装的dev c++里面设置了lib和include都没用,我注意到你的windows下的编译命令带有oci.lib,去掉的话和我在dev c++(gcc编译)里面报的错一样。大师哪天想折腾了,看看吧:D

不太明白你说的, 我也没有这样的环境, 直接将32位的拷过去, 不能用吗?
我在VMWare的Linux中编译出来的拷贝到EM的机器中,是可以直接跑的.

可以用的。我不是想用,我是想看看怎么写的。就是搭个oci的编译环境。你的小包蛮好用的。:D

我用的是Red Hat Linux 3.0和5.0 (2.6.18-8.el5 #1 SMP), 32bit, 需要把 /lib32 改成 /lib.

gcc -m32 -I$ORACLE_HOME/rdbms/demo -I$ORACLE_HOME/rdbms/public -L${ORACLE_HOME}/lib -ldl -o ociuldr.bin ociuldr.c -lm -lclntsh

另外有个想法, 如果能像生成SQL*Loader control file一样生成CREATE external table SQL script就好了.

外部表的语法可以用sqlldr来产生的了,我再做此功能是不是有些重复啊。

发表留言:

« Previous | Main | Next »

英语900句 | English 900

  • I want an apartment with two bedrooms and a kitchen.
  • 我想要一套有两间卧室和一个厨房的公寓.
  • The houses downtown are very expensive.
  • 市区的房子很贵.
  • How much is the rent for a month?
  • 每月租金多少?
  • I feel at home living here. The landlady is very kind to me.
  • 我觉得住在这里象在家里一样. 房东太太对我很好.
  • We have a few kitchen things and a dining room set.
  • 我们有一些厨房用具和一套餐厅设备.