我有一个C++代码,它依赖于libuv库(C代码)。由于段错误而崩溃。我缩小了问题范围:libuv使用struct stat
从<sys/stat.h>
。如果我打印这个结构的大小在我的代码:GCC - 类型声明的确切位置
printf("struct stat size: %d\n", sizeof(struct stat));
它显示88.如果我打印相同的libuv库,它表明96这是段错误的原因。我有点卡在这里。我如何找到类型声明的确切位置?任何其他方法来解决这个问题?
我有一个C++代码,它依赖于libuv库(C代码)。由于段错误而崩溃。我缩小了问题范围:libuv使用struct stat
从<sys/stat.h>
。如果我打印这个结构的大小在我的代码:GCC - 类型声明的确切位置
printf("struct stat size: %d\n", sizeof(struct stat));
它显示88.如果我打印相同的libuv库,它表明96这是段错误的原因。我有点卡在这里。我如何找到类型声明的确切位置?任何其他方法来解决这个问题?
您可以用cc -E xxx.c
预处理源代码,然后在那里查找有问题的定义。预处理的xxx.i
中的#file
和#line
指令会指出您犯罪的大概位置。或刚开始时(在库的任何东西之前),编译器应该尖叫你重新定义struct
;-)
CC -E xxx.c做了诡计。谢谢! – 2013-02-20 08:52:17
你是否确实是原因?您是否曾尝试在调试器中运行您的程序并检查调用堆栈?你应该先做。 – 2013-02-19 16:11:43
您是自己编译'libuv'还是使用预编译的二进制文件? – 2013-02-19 16:14:03
虽然根据启用的某些posix功能,具有不同大小的struct stat并不少见,但如果仅在使用相同定义的代码中传递此类结构,通常没有问题。所以如果你不用libuv交换这样的结构,那么罪魁祸首可能在其他地方。如果你这样做,你应该设置与他们相同的定义(更好的是,他们设置正确的定义,如果你首先包括他们的头,这可能会起作用) – PlasmaHH 2013-02-19 16:47:26