当使用-O0时,g++在未定义的引用上停止
g++ stops on undefined reference when using -O0
我想调试我编写的程序。因此,我想用"-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.ooc_poly-oc_pp.o-L/opt/ipopt-3.9.3/lib/coin-L/opt/ippot--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/ippot-3.9/lib/coin/libipopt.so-llapack-ldl/opt/ippot--3.9.3/lib/coin/ThirdParty/libcoinhsl.so/opt/ipopt-3.9.3/lib/coin/ThirdParty/libcoinblast.so/opt/ipopt-3.9.3/lib/coin/Third Party/libconilapack.so/opt/ippot-3.9.3/lib/coin/ThirdParty/libconomps.so-lpthread-lblas-lgfortran-lm-lgcc_s/opt/ipopt-3.9.3/lib/coin/ThirdParty/libcoimetis.so-L/opt/adolc-2.2.1/lib/opt/adolc-2.2.1/lib/libadoldc.so-Wl,-rpath-Wl,/opt/ipopt-3.9.3/lib/coin-Wl,-r path-Wl,/opt/ipopt-3.9.3/lib/coin/ThirdParty-Wl,-rpath-Wl,/opp/adolc-2.1/lib-Wl,-r path-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.1/liboc_poly-oc_pp.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。
有人能给我一个提示吗,这里出了什么问题?如何调试程序?
感谢
Christian
静态类成员变量需要定义;即使它是在类定义中初始化的,这只是一个声明。换句话说,你需要把
const double OCP_P2P::INF;
cpp文件中的某个位置。据推测,当启用优化时,变量的使用被优化掉了。
官方规则是,根据标准对使用的定义,如果使用的变量,则需要定义,这基本上是如果使用了指向变量的指针,或者变量绑定到引用。
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用