以前常用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
Posted by anysql | Nov 9, 2006 3:36 PM
64位io的编译选项(Linux/Unix)
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
Posted by anysql | Nov 13, 2006 4:19 PM
请问,em64的cpu是不是不能按照文章中(windows下)的方法编译?
Posted by zl | Jun 16, 2007 4:51 PM
32位的机器上编过去了
Posted by zl | Jun 16, 2007 5:01 PM
我没有em64的机器, 不过em64的技术只是在寻址上变成了48位, 而cpu事实上还是一样的, 应当可以的吧.
Posted by anysql | Jun 16, 2007 8:50 PM
可以的,但是环境变量没有用了。(用64位会不会把全世界的存储都寻址到了?)。我是把*.lib放到bin下面编的。我装的dev c++里面设置了lib和include都没用,我注意到你的windows下的编译命令带有oci.lib,去掉的话和我在dev c++(gcc编译)里面报的错一样。大师哪天想折腾了,看看吧:D
Posted by zl | Jun 16, 2007 11:38 PM
不太明白你说的, 我也没有这样的环境, 直接将32位的拷过去, 不能用吗?
我在VMWare的Linux中编译出来的拷贝到EM的机器中,是可以直接跑的.
Posted by anysql | Jun 17, 2007 11:06 AM
可以用的。我不是想用,我是想看看怎么写的。就是搭个oci的编译环境。你的小包蛮好用的。:D
Posted by zl | Jun 17, 2007 3:18 PM
我用的是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就好了.
Posted by 木匠 | Mar 8, 2008 6:50 AM
外部表的语法可以用sqlldr来产生的了,我再做此功能是不是有些重复啊。
Posted by anysql | Mar 8, 2008 8:03 AM