【发布时间】:2011-10-05 15:08:33
【问题描述】:
我正在将一些旧代码转换为 Oracle Pro*C。我在使用 Oracle 11.2 的 Linux 机器上。我们使用“.cp”作为 Pro*C 源文件的后缀。我不是一个 C 开发人员,所以我有点摸不着头脑。
有一次我在共享库文件“assign_field.cp”中有一些代码,所以我在 myprog.cp 中做
EXEC SQL INCLUDE "assign_field.cp";
现在,在 assign_field.cp 中,我有一行非常常见的 Pro*C 代码...
EXEC SQL INCLUDE SQLCA;
对于这一行,以及其他许多,我看到以下编译器输出:
assign_field.cp:35: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âSQLâ
编译器似乎没有识别出这是 Pro*C 代码。
我还有其他包含文件,它们看起来与 assign_field.cp 非常相似,但在包含时似乎编译得很好。
【问题讨论】:
-
我不明白你对你在做什么的描述。如果
assign_field.cp是构成共享库一部分的源文件,那么您为什么要尝试将其包含在(我假设是)您的可执行文件中?当然你应该稍后链接到图书馆?我希望每个.cp文件都能编译成它自己的.o文件,并根据需要将它们链接到库或可执行文件中。如果这是常见的,而不是真正的库代码,那么它可能是有意义的,并且需要exec sql。不知道我是否遗漏了什么——也不是 C 专家……另外,你继承了 makefile 吗? -
我确实继承了一个makefile。 (哎呀,回车太快了)我没有 .h 文件,因为 .cp 文件看起来好像需要包含在内,这就是为什么我只是直接在源文件中包含 .cp 文件。跨度>
-
你的makefile是否创建了一个库,然后将exe链接到它;或为
.cps 创建单独的.os 并将几个链接到exe;还是根本没有提到assign_field?仍然不太确定...myprog.cp是否正在调用assign_field.cp中但没有(外部)声明的函数,您希望在相关的.h中看到这些函数? -
makefile 根本没有明确提到 assign_field。由于 Oracle Pro*C 预编译器指令的存在,makefile 的活动变得复杂。 myprog.cp 正在调用 assign_field.cp 中的函数,并且没有针对它们的 extern 声明。
标签: oracle oracle-pro-c