2013-02-19 69 views
1

我有一个C++代码,它依赖于libuv库(C代码)。由于段错误而崩溃。我缩小了问题范围:libuv使用struct stat<sys/stat.h>。如果我打印这个结构的大小在我的代码:GCC - 类型声明的确切位置

printf("struct stat size: %d\n", sizeof(struct stat)); 

它显示88.如果我打印相同的libuv库,它表明96这是段错误的原因。我有点卡在这里。我如何找到类型声明的确切位置?任何其他方法来解决这个问题?

+3

你是否确实是原因?您是否曾尝试在调试器中运行您的程序并检查调用堆栈?你应该先做。 – 2013-02-19 16:11:43

+2

您是自己编译'libuv'还是使用预编译的二进制文件? – 2013-02-19 16:14:03

+1

虽然根据启用的某些posix功能,具有不同大小的struct stat并不少见,但如果仅在使用相同定义的代码中传递此类结构,通常没有问题。所以如果你不用libuv交换这样的结构,那么罪魁祸首可能在其他地方。如果你这样做,你应该设置与他们相同的定义(更好的是,他们设置正确的定义,如果你首先包括他们的头,这可能会起作用) – PlasmaHH 2013-02-19 16:47:26

回答

1

您可以用cc -E xxx.c预处理源代码,然后在那里查找有问题的定义。预处理的xxx.i中的#file#line指令会指出您犯罪的大概位置。或刚开始时(在库的任何东西之前),编译器应该尖叫你重新定义struct ;-)

+0

CC -E xxx.c做了诡计。谢谢! – 2013-02-20 08:52:17