使用-O0时,g ++在未定义的引用上停止

Chr*_*olf 0 c++ optimization g++ reference undefined

我想调试我写的程序.因此我想用"-g -O0"链接它.当我使用编译(使用autotools Makefile)时

制作CXXFLAGS =' - g -O0'

我收到一些错误:

libtool:link:g ++ -O2 -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 -Wl,-rpath -Wl,/ 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:在f 结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 toOCP_P2P :: INF"

提到的符号INF是在类定义OCP_P2P中定义的静态类成员.

如果省略CXXFLAGS或将它们设置为O1,O2,O3或Os的任何优化值,则链接效果非常好.我正在使用g ++ 4.5.2.

任何人都可以给我一个提示,这里出了什么问题?我该如何调试我的程序?

谢谢

基督教

yme*_*ett 5

静态类成员变量需要一个定义; 即使它在类定义中初始化只是一个声明.换句话说,你需要把

const double OCP_P2P::INF;
Run Code Online (Sandbox Code Playgroud)

某个cpp文件中的某个地方.据推测,当启用优化时,变量的使用被优化了.

官方的规则是,需要一种定义,如果在可变使用,根据标准的定义中使用,它基本上是,如果指针变量取,或者,若变量绑定到一个参考.