2011-08-07 92 views
0

我想調試我編寫的程序。因此,我想用「-g -O0」鏈接它。當我編譯(使用自動工具的Makefile)使用當使用-O0時,g ++停止在未定義的引用上

使CXXFLAGS = ' - g^-O0'

我得到一些錯誤:

的libtool:鏈接:G ++ -02 -g -O0 -I/opt/adolc-2.2.1/include -o oc_poly oc_poly-oc_poly.o oc_poly-oc_p2p.o -L/opt/ipopt-3.9.3/lib/coin -L/opt/ipopt-3.9 .3/lib/coin/ThirdParty -L/usr/lib/i386-linux-gnu/gcc/i686-linux-gnu/4.5.2 -L/usr/lib/i386-linux-gnu/gcc/i686- linux-gnu/4.5.2 /。 ./../ .. -L/usr/lib/i386-linux-gnu /opt/ipopt-3.9.3/lib/coin/libipopt.so -llapack -ldl /opt/ipopt-3.9.3/lib /coin/ThirdParty/libcoinhsl.so /opt/ipopt-3.9.3/lib /coin/ThirdParty/libcoinblas.so /opt/ipopt-3.9.3/lib/coin/ThirdParty/libcoinlapack.so /opt/ipopt -3.9.3/lib/coin/ThirdParty/libcoinmumps.so -lpthread -lblas -lgfortran -lm -lgcc_s /opt/ipopt-3.9.3/lib/coin/ThirdParty/libcoinmetis.so -L/opt/adolc- 2.2.1/lib /opt/adolc-2.2.1/lib/libadolc.so -Wl,-rpath -Wl,/ opt/ipopt-3.9.3/lib/coin-W1,-rpath -W1/opt/ipopt-3.9.3/lib/coin/ThirdParty -Wl,-rpath -Wl,/ opt/adolc-2.2.1/lib -Wl,-rpath -Wl,/ opt/ipopt-3.9.3/lib/coin -Wl,-rpath -Wl,/ opt/ipopt-3.9.3/lib/coin/ThirdParty -Wl,-rpath -Wl,/ opt/adolc-2.2.1/lib oc_poly- oc_p2p.o:功能OCP_P2P::get_bounds_info(int, double*, double*, int, double*, double*)': /home/christian/Dokumente/Uni/SA/ist/Berechnungen/Optimale Steuernug/IpOpt /oc_p2p.cpp:162: undefined reference to OCP_P2P :: INF'

上述符號INF是在類定義OCP_P2P中定義的靜態類成員。

如果我省略了CXXFLAGS或將它們設置爲O1,O2,O3或Os的任何優化值,則鏈接工作得很好。我正在使用g ++ 4.5.2。

有人可以給我一個提示,這裏有什麼問題嗎?我如何調試我的程序?

由於

基督教

+0

你如何聲明靜態類成員? – Albert

+0

'class OCP_P2P:public TNLP private: static const double INF = 2e19; }' –

+0

你以前試過make clean嗎? – thiton

回答

5

靜態類成員變量需要的定義;即使它是在只是聲明的類定義中初始化的。換句話說,你需要把

const double OCP_P2P::INF; 

cpp文件中的某處。推測優化開啓後,變量的使用被優化了。

官方規則是,如果該變量是使用需要一種定義,根據標準的定義中使用,這基本上是,如果截取的指針的變量,或者,若變量綁定到一個參考。

+0

就是這樣。謝謝! –

相關問題