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)

谢谢。

编辑:我试图进一步调查,并意识到我无法修改 GMP 库,尽管我有资源。printf("hello\n");我在程序开头调用的函数的开头插入了 a mpz_init2,我重新编译了所有 GMP(甚至在 a 之后make clean)重新安装了库make install,然后我编译并启动了我的程序,但它从未打印过“你好”。我还确定,我没有使用另一个已安装的 GMP 库(当我这样做时,make uninstall我的程序无法编译,因为它找不到该库)。尽管如此,我还是坚持 gcc 使用 -L 选项在 GMP 源文件夹中查找库。

我不知道我做错了什么:(

4

1 回答 1

0

您对 a.out 的最终编译不会生成静态链接的 a.out 可执行文件。因此,即使如您所说,在 program.c 编译期间,编译器正在使用您的 GMP 库,但在运行时它会在某处获取共享库。您需要做以下两件事之一:

  1. 使用 -Bstatic 编译(或类似的东西;查看编译器的手册页)
  2. 设置 LD_LIBRARY_PATH(或类似的东西;检查 'ld' 或 'dyld' 手册页)

我认为#1实际上是您唯一的选择,因为您只构建了静态版本的 GMP。对于#1,请确保在 program.c 的编译中明确提供 -L/path/to/gmplib

于 2012-04-25T15:35:22.107 回答