我已经下载了GMP库5.02的源代码,并且 - 为了最大程度的可调试性而建议here - 我跑了:
./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");
函数的最开头插入mpz_init2
,我在程序开始时调用了该函数,我重新编译了所有GMP(即使在make clean
之后)重新安装了库使用make install
,然后我编译并启动了我的程序,但它从未打印过“hello”。我也确定,我没有使用另一个已安装的GMP库(当我执行make uninstall
时,我的程序无法编译,因为它找不到库)。不过,我坚持认为gcc使用-L选项在GMP源文件夹中查找库。
我不知道我做错了什么:(
答案 0 :(得分:0)
a.out的最终编译不会产生静态链接的a.out可执行文件。所以,即使如你所述,在编译program.c期间,编译器正在使用你的GMP库,在运行时它正在某个地方挑选一个共享库。你需要做两件事之一:
我认为#1实际上是您唯一的选择,因为您只构建了GMP的静态版本。对于#1,请确保在program.c
的编译中明确提供-L / path / to / gmplib