0

私は GMP ライブラリ 5.02 のソースをダウンロードしました。そして、最大のデバッグ可能性のためにここで提案されているように、実行しました:

./configure --disable-shared --enable-assert --enable-alloca=debug --host=none CFLAGS=-g

makeでコンパイルしてから、make installでライブラリをインストールしました。次に、プログラムを次のようにコンパイルしました。gcc -lgmp -std=c99 -g -c program.c次に、実行しました:ltrace ./a.out

しかし、ltrace は、ソース コードにある TRACE() 関数をまったく呼び出していないことに気付きました。TRACE() の内容をトレースしたいと思います。

そのためにはどうすればいいですか?または、GMP ライブラリ内でデバッグする他の簡単な方法はありますか? (gdbでそれを行う方法を理解できませんでした.gmp_printfにステップインしたくありませんでした)

ありがとう。

EDIT : さらに調査を試みたところ、ソースはあるのに GMP ライブラリを変更できないことがわかりました。プログラムの最初に呼び出す関数printf("hello\n");の最初にa を挿入し、すべての GMP を ( a の後でも) を使用してライブラリを再インストールし、プログラムをコンパイルして起動しましたが、出力されませんでした」こんにちは"。また、インストールされている別の GMP ライブラリを使用していないことも確認しました (ライブラリが見つからないため、プログラムをコンパイルできません)。それでも、gcc は -L オプションを使用して GMP ソース フォルダー内のライブラリーを検索するように主張しました。mpz_init2make cleanmake installmake uninstall

何が間違っているのかわかりません:(

4

1 に答える 1

0

a.out の最終コンパイルで、静的にリンクされた a.out 実行可能ファイルが生成されません。したがって、あなたが述べたように、program.c のコンパイル中にコンパイラは GMP ライブラリを使用していますが、実行時にどこかで共有ライブラリを選択しています。次の 2 つのいずれかを行う必要があります。

  1. -Bstatic (または同様のもの; コンパイラのマニュアル ページを確認してください) でコンパイルします。
  2. LD_LIBRARY_PATH を設定します (または同様のもの。「ld」または「dyld」のマニュアル ページを確認してください)。

GMP の静的バージョンのみをビルドしたことを考えると、実際には #1 が唯一の選択肢だと思います。#1 については、program.c のコンパイルで -L/path/to/gmplib を明示的に指定してください。

于 2012-04-25T15:35:22.107 に答える