2011-09-05 110 views
0

我有問題,我想用lib hqp編譯一些軟件。這個lib使用adolc,但是舊版本的一個棄用函數。由於我只有新版本,所以缺少一個類(adoublev),並且出現編譯錯誤。現在我嘗試寫一個包裝,但在這裏我得到錯誤。C++:未定義的函數參考

之前:我直到現在還沒有意識到問題,並編譯了新版本的adolc hqp。我寫了一個簡單的adoublev類,它實現了必要的操作符(operator [])。

現在我想編一個例子。我得到

Prg_T2Topt.o:(.rodata._ZTV10Prg_T2Topt[vtable for Prg_T2Topt]+0x20): 
    undefined reference to `Omu_Program::consistic(int, double, adoublev const&, adoublev const&, adoublev&)' 

注意:Prg_T2Topt。*是我的例子,Omu_Program是hqp的一部分。

爲什麼hqp的第一次安裝不會以關於adoublev(gcc/g ++ used)缺失聲明/定義的錯誤而告終? 我是否需要更新hqp,以便不再使用adoublev?

爲什麼編譯我的示例會導致關於consistic的錯誤,即使此示例中沒有實現此方法?

的例子可以在http://codepad.org/Cv0tdoyShttp://codepad.org/ezQQPUg4找到(有點冗長)

+0

一般來說,編譯器(或者說連接器)不會呻吟一下未定義的引用,除非有東西試圖使用它。可能發生的事情是,你正在使用的庫函數之一是試圖調用它,當構建庫時,它不會因爲編譯而不是鏈接而呻吟。 – Dan

回答

0

由於類Prg_T2Topt基於Omu_Program,它繼承Omu_Program的方法,包括consistic(),由於你的類沒有重載consistic( ),編譯器試圖使用Omu_Program :: consistic()。

你鏈接了哪些庫?看起來你在鏈接階段錯過了一些東西。

+0

是的,@istepura是正確的......你在連接階段缺少一些東西......你需要告訴你的編譯器庫(你正在使用的)在哪裏...... – c0da