繁体   English   中英

调试中不满意的符号,但不发布

[英]Unsatisfied symbols in Debug but not Release

我正在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生成的预编译头文件),它似乎是以相同的方式定义的。

我猜测发布代码路径中的某些内容可以解决该问题,但是我想听听大家是否有一些想法。

链接器抱怨未定义某些内容时,要做的第一件事就是亲自查找该内容的定义位置。 如果找不到它,也不要期望链接器也找到它。

您显示的是声明,而不是定义。 定义将没有extern关键字。 项目中应该只有一个.cpp文件,而不是标头。

找到定义后,就可以开始研究为什么链接器看不到它。 也许只有在存在某些符号(例如DEBUGNDEBUG时才定义它。

如果没有定义,那么也许它的所有用户发行编译过程中遭到移除(也许是因为所有用途发生在assert语句编译器省略),因此丢失的定义是不是在释放模式注意到。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM