簡體   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