使用-O0当上未定义参考克++停止(g++ stops on undefined reference

2019-10-30 00:55发布

我想调试程序我写的。 为此,我想用“-g -O0”挂靠。 当我编译(使用自动工具的Makefile)使用

使CXXFLAGS = ' - 克-O0'

我得到一些错误:

libtool的:链接:克++ -O2 -g -O0 -i /选项/ adolc-2.2.1 / -o包括oc_poly oc_poly-oc_poly.o oc_poly-oc_p2p.o -L /选项/ ipopt-3.9.3 /作用/狗-L /选项/ ipopt-3.9.3 /演艺/狗/第三方-L在/ usr /演艺/ I386-Linux的GNU / GCC / i686的-Linux的GNU / 4.5.2 -L在/ usr /演艺/ I386-Linux的-gnu / GCC / Linux的i686- GNU / 4.5.2 .. /../../ -L在/ usr /代理/ I386-Linux的GNU /opt/ipopt-3.9.3/lib/coin/libipopt。这-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/演技/狗/第三方/ 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/第三方/ libcoinmetis.so -L /选项/ adolc-2.2.1 /作用/opt/adolc-2.2.1/lib/libadolc.so -Wl,-rpath -Wl,/选项/ ipopt-3.9.3 /表演/ -Wl狗,-rpath -Wl,/选项/ ipopt-3.9.3 /表演/狗/第三方-Wl,-rpath -Wl,/选项/ adolc-2.2.1 /作用-Wl,-rpath -Wl,/选项/ ipopt-3.9.3 /演艺/ -Wl狗,-rpath -Wl为/ opt / ipopt-3.9.3 /表演/狗/第三方-Wl,-rpath -Wl为/ opt / adolc-2.2.1 / 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 to OCP_P2P :: INF“

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

如果我省略了CXXFLAGS或将它们设置为O1,O2,O3或Os进行任何优化,价值链接的效果相当不错。 我使用的G ++ 4.5.2。

任何人都可以给我一个提示,这是怎么回事错在这里? 如何调试我的程序?

谢谢

基督教

Answer 1:

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

const double OCP_P2P::INF;

在某处一个CPP文件。 据推测当优化在开启使用的变量被优化掉了。

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



文章来源: g++ stops on undefined reference when using -O0