【发布时间】:2014-03-04 11:04:49
【问题描述】:
我刚刚转移到 ubuntu 并新使用 gdb 和 g++ 。如果我的问题很愚蠢,请原谅我。
这是来自 Richard Stevens Advanced Linux Programming 。在文件夹名称互惠中创建了三个文件
main.c:
#include <stdio.h>
#include "reciprocal.hpp"
int main (int argc, char **argv)
{
int i;
i = atoi (argv[1]);
printf ("The reciprocal of %d is %g\n", i, reciprocal (i));
return 0;
}
reciprocal.cpp:
#include <cassert>
#include "reciprocal.hpp"
double reciprocal (int i) {
// I should be non-zero.
assert (i != 0);
return 1.0/i;
}
reciprocal.hpp:
#ifdef __cplusplus
extern "C" {
#endif
extern double reciprocal (int i);
#ifdef __cplusplus
}
#endif
编译后,我运行了命令(gdb) reciprocal 和(gdb) run。我期待着书中的东西
Starting program: reciprocal
Program received signal SIGSEGV, Segmentation fault.
__strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)
at strtol.c:287
287 strtol.c: No such file or directory.
(gdb)
但我得到了:
Starting program: /home/trafalgar/Desktop/reciprocal/reciprocal
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
Program received signal SIGSEGV , Segmentation fault.
0x00007ffff7a56ad4 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
可能会发生什么不同。这是版本问题还是其他问题?
这是 Makefile
reciprocal: main.o reciprocal.o
g++ $(CFLAGS) -o reciprocal main.o reciprocal.o
main.o: main.c reciprocal.hpp
gcc $(CFLAGS) -c main.c
reciprocal.o: reciprocal.cpp reciprocal.hpp
g++ $(CFLAGS) -c reciprocal.cpp
clean:
rm -f *.o reciprocal
【问题讨论】:
-
我认为设置详细程度会有所帮助,但它仍然提供与以前相同的输出
-
调试器正在工作(在带有调试信息的二进制文件上)。您的代码不起作用。
-
使用
rm -v *.o recpirocal进行清理。重新编译所有源代码。向我们展示您的编译命令。再次启动调试器。