私は根本のアンドロイドデバイスで実行するコマンドラインC++テストアプリケーション(実行可能ファイル)を作成しています。定義されていない参照エラー - rand
実行可能ファイルは、複数の事前ビルドされたCライブラリを使用し、そのうちの1つは 'rand()'を使用します。リンク状態の間、私はエラー "の定義されていない参照 'rand'"
パスが正しく設定されているかどうかを確認するには、
最初のアプローチ:テストソースでrand()を定義します。
私はみとめ定義エラーを取得することがわかり、最初の定義は、バイオニックにある/ libcのは、/は、/ STDLIB.H
第二のアプローチ:私は気付か
私のテストアプリケーションで使用しランド()リンカはここに未定義シンボル
第三のアプローチ文句ないこと:すべてのオブジェクトファイルアーカイブ解除済みおよびアーカイブ
未定義の参照エラーがまだ発生することがわかりました。
'rand'を使用するCライブラリをCテストファイルを使用して実行可能ファイルにコンパイルすると、前述のリンカエラーは表示されません。
私はあらかじめビルドされた静的ライブラリを変更することはできず、C++ベースのテストアプリケーションでライブラリを使用する必要があります。
すべての入力は大歓迎です。
ライブラリは、 'unsigned int rand'の代わりに 'int rand'を返すようにrandが期待するように聞こえます。静的にリンクされている場合、なぜ 'ハック'を使用してテストCファイルをコンパイル/リンクするのですか? –
randは標準のCモジュールであり、共有オブジェクトまたは実行可能ファイルの作成中にリンクされます。私に提供された静的ライブラリは、rand()呼び出しを使用し、その定義は含まれていません。 – Deepak
私はシンボルのダンパーを調べることをお勧めします。私はrand()が何であるかを知っています。静的ライブラリがCライブラリが使用するものとは異なるバージョンに対してコンパイルされた可能性が高いことがわかります。あなたはこれをいくつかの方法でクリアすることができます(独自のrandを提供し、C randに 'ラッパー'を提供するなど)が、シンボルダンプをチェックするのが最善の方法です。また、http://stackoverflow.com/questions/4768180/rand-implementationに誘導します –