c++ - 使用 -O0 时 g++ 在 undefined reference 处停止

标签 c++ optimization reference g++ undefined

我想调试我写的程序。因此我想使用“-g -O0”链接它。当我编译(使用自动工具 Makefile)时使用

make 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: In function 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。

谁能给我一个提示,这里出了什么问题?如何调试我的程序?

谢谢

基督徒

最佳答案

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

const double OCP_P2P::INF;

cpp 文件中的某处。据推测,当打开优化时,变量的使用被优化掉了。

根据标准的used 定义,官方规则是如果变量被used 则需要一个定义,这基本上就是指向变量的指针是采取,或者变量是否绑定(bind)到引用。

关于c++ - 使用 -O0 时 g++ 在 undefined reference 处停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6973038/

相关文章:

c++ - 反向 P/调用教程?

c++ - 静态初始化不安全调用的线程安全

rust - 我无法理解 Rust "scope"定义(Rust 编程语言,第二版。Klabnik & Nichols)

c++ - 继承自 UActorComponent 错误 : Declaration must correspond to a pure virtual function

c++ - 下面的代码,是格式错误的 NDR 还是格式正确?

c++ - 在 C++ 中通过 int id 跟踪少量结构类型的有效方法是什么?

java - 如何使用NIO优化jetty web应用程序?

c++ - 将 39567865 个无符号字符加载到 RAM : Valid approach?

javascript - 存储对 DOM 元素的引用

c++ - C++ 中类定义的顺序