Debug中不满意的符号但不释放

时间:2011-01-04 20:35:47

标签: c++ build hp-ux

我在HPUX上构建一些东西。代码在Sun / Linux / AIX中运行良好。

但在HPUX上,它抱怨

[sshexec] /usr/ccs/bin/ld: Unsatisfied symbols:
[sshexec]    globalVar (first referenced in blah.o)

代码再次在Release中运行,但在Debug中不运行。 所有这一切都使用在其他文件中定义的全局变量

extern globPck globalVar;

globPck是一个包含一些全局内容的类。

我更感兴趣的是,这可能是在Release中工作的原因,而不是在Debug中。

我查看了.i文件(使用-E生成的预编译头文件) 似乎也以同样的方式定义。

我猜测发布代码路径中遇到的某些东西修复了它,但我在这里听到你们是否有一些想法。

2 个答案:

答案 0 :(得分:3)

当链接器抱怨没有定义某些内容时,要做的第一件事就是找到 定义的东西。如果找不到它,那么也不要指望链接器找到它。

您所展示的是声明,而不是定义。定义不会包含extern关键字。应该在项目中只有一个 .cpp 文件中有一个定义,而不是标题。

找到定义后,您就可以开始研究链接器没有看到它的原因了。也许它仅在存在某些符号时定义,例如DEBUGNDEBUG

如果没有定义,那么在发布编译期间可能会删除它的所有使用(可能是因为所有使用都发生在编译器忽略的assert语句中),所以缺少定义在发布模式下没有注意到。

答案 1 :(得分:0)

如果仅从主要执行路径间接访问类,HPUX编译器喜欢“优化掉”构造函数对全局类的调用。尝试在主线程的某处添加一个简单的printf()和变量值,看看问题是否消失了。