1

HPUXで何かを構築しています。コードはSun/Linux/AIXで正常に機能します。

しかし、HPUXでは不平を言います

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

ここでも、コードはリリースでは機能しますが、デバッグでは機能しません。他のファイルで定義されたグローバル変数を使用します

extern globPck globalVar;

globPckは、いくつかのグローバルなものを含むクラスです。

これがリリースでは機能するがデバッグでは機能しない理由は何であるかというアイデアにもっと興味があります。

.iファイル(-Eで生成されたプリコンパイル済みヘッダーファイル)を調べましたが、同じように定義されているようです。

リリースコードパスでヒットしたものがそれを修正すると推測していますが、yallがいくつかのアイデアを持っているかどうかを聞くためにここにいます。

4

2 に答える 2

3

リンカが何かが定義されていないと文句を言ったときに最初に行うことは、そのこと定義されている場所を自分で見つけることです。見つからない場合は、リンカーがそれを見つけることも期待しないでください。

あなたが示したのは宣言であり、定義ではありません。extern定義にはキーワードがありません。ヘッダーではなく、プロジェクト内の1つの.cppファイルに定義が含まれている必要があります。

定義を見つけたら、リンカーがそれを認識しない理由について作業を開始できます。DEBUGたぶん、またはなどの特定の記号が存在する場合にのみ定義されNDEBUGます。

定義がない場合は、リリースのコンパイル中にすべての使用が削除される可能性があります(おそらくassert、コンパイラが省略したステートメントですべての使用が発生するため)。したがって、リリースモードでは定義の欠落は認識されません。

于 2011-01-04T21:02:35.337 に答える
0

HPUXコンパイラは、クラスが実行のメインパスから間接的にのみアクセスされる場合、グローバルクラスへのコンストラクター呼び出しを「最適化」するのが大好きです。メインスレッドのどこかに変数の値を含む単純なprintf()を追加してみて、問題が解消されるかどうかを確認してください。

于 2014-05-14T13:33:19.460 に答える