2011-10-05 97 views
0

我正在將一些遺留代碼轉換爲Oracle Pro * C。我在使用Oracle 11.2的Linux機器上。我們使用「.cp」作爲Pro * C源文件的後綴。我並不是一個C開發人員,所以在我走的時候,我在黑暗中徘徊。包含文件中EXEC SQL語句的Oracle Pro * 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,但似乎編譯時很好,如果包括。

+1

我不明白你對你在做什麼的描述。如果'assign_field.cp'是構成共享庫一部分的源文件,爲什麼要將它包含進(我認爲是)您的可執行文件?你以後應該連接圖書館嗎?我希望每個'.cp'文件都可以編譯成它自己的'.o'文件,並且可以根據需要將它們鏈接到庫或可執行文件中。如果這是常見的,而不是真正的庫代碼,那麼它可能是有道理的,並且需要'exec sql'。不知道我是否錯過了一些東西 - 不是C專家...另外,你是否繼承了makefile? –

+0

我確實繼承了一個makefile。 (哎呦,輸入太快)我沒有.cp文件,看起來好像需要包含它們,這就是爲什麼我只是直接在源文件中包含.cp文件。 –

+0

你的makefile是否創建了一個庫,然後將exe鏈接到它;或爲'.cp'創建單獨的'.o's並將幾個鏈接到exe中;還是根本沒有提到'assign_field'?仍然不太確定...是'myprog.cp'調用'assign_field.cp'中的函數,但沒有(extern)聲明他們,你期望在相關的'.h'中看到? –

回答

1

不要在程序流中包含C文件(本例中爲.cp文件)。將它們分別編譯;只涉及函數的聲明,如在一個包含的.h文件中。在調用makefile中的鏈接器時參考已編譯的目標文件(可能是.o)。