2013-02-19 5 views
1

У меня есть код на C++, который зависит от библиотеки libuv (код C). Это из-за segfault. Я сузил проблему: libuv использует struct stat от <sys/stat.h>. Если я печатаю размер этой структуры в моем коде:GCC - точное местоположение объявления типа

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

это показывает 88. Если я печатаю то же самое в библиотеке libuv, он показывает 96. Это причина Segfault. Я немного застрял здесь. Как найти точное местоположение объявления типа? Любой другой подход к решению этой проблемы?

+3

Вы являетесь причиной _sure_? Вы пытались запустить вашу программу в отладчике и изучить стек вызовов? Вы должны сделать это сначала. –

+2

Вы сами создали 'libuv' или используете предварительно скомпилированный бинарный файл? –

+1

Несмотря на то, что структура stat имеет разный размер в зависимости от определенных функций posix, это обычно не имеет значения, если вы передаете такую ​​структуру только внутри кода, который использует то же определение. Поэтому, если вы не обмениваетесь такой структурой с libuv, тогда виновник, скорее всего, находится в другом месте. И если вы это сделаете, вы должны установить те же самые определения, что и они (еще лучше было бы установить правильные определения, которые могут работать, если вы сначала включите их заголовок) – PlasmaHH

ответ

1

Вы можете предварительно обработать источник с помощью cc -E xxx.c и найти там оскорбительное определение. Директивы #file и #line в предварительно обработанном xxx.i указывают на приблизительное положение виновника. Или просто #include <sys/stat.h> в самом начале (перед любыми материалами из библиотеки) компилятор должен кричать на вас, чтобы переопределить struct ;-)

+0

cc -E xxx.c сделал трюк. благодаря! –

Смежные вопросы