![](/img/trans.png)
[英]Define DEBUG and RELEASE symbols in Visual Studio Code
[英]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文件,而不是标头。
找到定义后,就可以开始研究为什么链接器看不到它。 也许只有在存在某些符号(例如DEBUG
或NDEBUG
时才定义它。
如果没有定义,那么也许它的所有用户发行编译过程中遭到移除(也许是因为所有用途发生在assert
语句编译器省略),因此丢失的定义是不是在释放模式注意到。
如果仅从执行的主要路径间接访问类,则HPUX编译器喜欢“优化”构造函数对全局类的调用。 尝试在主线程中的某个地方添加一个带有变量值的简单printf(),看看问题是否消失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.