我在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生成的预编译头文件) 似乎也以同样的方式定义。
我猜测发布代码路径中遇到的某些东西修复了它,但我在这里听到你们是否有一些想法。
答案 0 :(得分:3)
当链接器抱怨没有定义某些内容时,要做的第一件事就是找到 定义的东西。如果找不到它,那么也不要指望链接器找到它。
您所展示的是声明,而不是定义。定义不会包含extern
关键字。应该在项目中只有一个 .cpp 文件中有一个定义,而不是标题。
找到定义后,您就可以开始研究链接器没有看到它的原因了。也许它仅在存在某些符号时定义,例如DEBUG
或NDEBUG
。
如果没有定义,那么在发布编译期间可能会删除它的所有使用(可能是因为所有使用都发生在编译器忽略的assert
语句中),所以缺少定义在发布模式下没有注意到。
答案 1 :(得分:0)
如果仅从主要执行路径间接访问类,HPUX编译器喜欢“优化掉”构造函数对全局类的调用。尝试在主线程的某处添加一个简单的printf()和变量值,看看问题是否消失了。