一、VS2015下配置proc编译器所需操作大致如下图所示

vs 编译lua源码 vs2015编译器路径_proc*c/c

第一步就是将proc编译器集成到vs2015之中,需要加入proc.exe、proc头文件以及文件动态库。

第二步就是让proc编译器能够找到vs2015的头文件.

二、具体操作步骤

1.对于在windows下使用vs2015编译.pc文件,首先需要将proc.exe编译器的路径包含到vs2015中。

我的proc编译器路径如下所示:

vs 编译lua源码 vs2015编译器路径_vs 编译lua源码_02

添加到vs2015如下:

首先打开项目属性页:

vs 编译lua源码 vs2015编译器路径_vs2015_03

在把proc编译器路径添加进来:

vs 编译lua源码 vs2015编译器路径_proc*c/c_04

2.添proc相应的头文件以及文件动态库。

主要是precomp和OCI下的头文件和库文件(OCI是oracle的调用接口,下面可以不添加它的头文件和库文件)。

添加头文件:

vs 编译lua源码 vs2015编译器路径_proc*c/c_05

vs 编译lua源码 vs2015编译器路径_proc_06

添加库文件:

vs 编译lua源码 vs2015编译器路径_proc_07

vs 编译lua源码 vs2015编译器路径_vs2015_08

3.然后需要将precomp/LIB  路径下的动态库文件orasql11赋值到项目目录下

vs 编译lua源码 vs2015编译器路径_vs2015_09

然后添加到链接中

vs 编译lua源码 vs2015编译器路径_proc_10

vs 编译lua源码 vs2015编译器路径_proc_11

4.此时仍旧无法编译,右击项目会发现编译选项无法点击。需要进行设置让vs2015能够识别.pc文件。

vs 编译lua源码 vs2015编译器路径_proc*c/c_12

选择上图中的属性,注意是右击.pc文件,不是右击项目。

vs 编译lua源码 vs2015编译器路径_proc*c/c_13

vs 编译lua源码 vs2015编译器路径_头文件_14

设置完以后就可以进行编译了。

vs 编译lua源码 vs2015编译器路径_头文件_15

5.由于proc编译.pc文件时需要调用gcc或vs的头文件,因此还需要将vs2015的头文件加进来。通过更改pcscfg.cfg文件来实现(proc编译器会读取该文件的内容)。

vs 编译lua源码 vs2015编译器路径_proc*c/c_16

其路径如下:

vs 编译lua源码 vs2015编译器路径_头文件_17

对于pcscfg.cfg文件可能无法直接修改,可以先另存为,再复制到该目录下替换原来的文件。

加入vs2015头文件路径:

vs 编译lua源码 vs2015编译器路径_vs2015_18

之前在网上看到说是proc编译器对vs2013的头文件不支持,需要使用vc6.0的头文件。特意安装了visual c++ 6.0获取它的头文件,后来发现vs2015的头文件也能正常使用。估计可能是proc更新了吧。

6.编译之后可以生成.c文件。让后将.c文件添加进项目即可,然后再编译运行。

注意:以上的操作可以直接设置环境变量就不用每个项目都需要更改了,对于proc.exe的路径在oracle安装时就已经加入了环境变量之中。

三 vs2015编译proc*c/C++时遇到的问题

1、如果使用X86进行编译,将会出错。

vs 编译lua源码 vs2015编译器路径_头文件_19

vs 编译lua源码 vs2015编译器路径_proc*c/c_20

注意第二个警告才是重点,意思大概是orasql11.lib是64位的,如果我们程序想要编译成32位的就会出错。因此只要改成x64运行,程序就能正常运行。

vs 编译lua源码 vs2015编译器路径_vs2015_21

vs 编译lua源码 vs2015编译器路径_vs 编译lua源码_22

2、对于proc*c++,操作和proc*c基本一样,只是proc编译命令不一样。

vs 编译lua源码 vs2015编译器路径_proc*c/c_23

parse=none      告诉proc编译器 按照c++规范解析 dm02_hello.pc

code=cpp        告诉proc编译器   按照c++规范 生产文件

3、需要注意对于在vs2015中编译.pc文件,如果出现语法错误,并不会显示这个错误,而是直接按以下方式报错:

vs 编译lua源码 vs2015编译器路径_vs 编译lua源码_24

可以使用命令行进行编译,这样就能显示是否有语法错误。