【问题标题】:Oracle Pro*C precompiler errors on EXEC SQL statements in included files包含文件中 EXEC SQL 语句的 Oracle Pro*C 预编译器错误
【发布时间】: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


【解决方案1】:

不要在程序流中包含 C 文件(在本例中为 .cp 文件)。分别编译;仅引用函数的声明,例如在包含的 .h 文件中。在 makefile 中对链接器的调用中引用已编译的目标文件(可能是 .o)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-04
    相关资源
    最近更新 更多