Как мне обойти GCC «ошибка: приведение от« SourceLocation * »к« int »теряет точность» при компиляции cmockery.c? - PullRequest
0 голосов
/ 03 января 2011

Мне нужно добавить модульные тесты, используя Cmockery , в существующую среду сборки, которая использует Makefile, созданный вручную. Поэтому мне нужно выяснить, как создать cmockery.c (без automake).

Когда я бегу:

g++ -DHAVE_CONFIG_H -DPIC -I ../cmockery-0.1.2 -I /usr/include/malloc -c ../cmockery-0.1.2/cmockery.c -o obj/cmockery.o

Я получаю длинный список таких ошибок:

../cmockery-0.1.2/cmockery.c: In function ‘void initialize_source_location(SourceLocation*)’:
../cmockery-0.1.2/cmockery.c:248: error: cast from ‘SourceLocation*’ to ‘int’ loses precision

Вот строки 247: 248 файла cmockery.c:

static void initialize_source_location(SourceLocation * const location) {
    assert_true(location);

assert_true определяется в строке 154 файла cmockery.h:

#define assert_true(c) _assert_true((int)(c), #c, __FILE__, __LINE__)

Таким образом, проблема (из-за ошибки) в том, что GCC не нравится приведение из «SourceLocation *» к «int».

Я могу собрать Cmockery, используя ./configure и make (в Linux и в Mac OS X , если я export CFLAGS=-I/usr/include/malloc первый), без каких-либо ошибок. Я пытался просмотреть командную строку, которая компилирует cmockery.c, когда я запускаю make (после ./configure):

 gcc -DHAVE_CONFIG_H -I. -I. -I./src -I./src -Isrc/google -I/usr/include/malloc -MT libcmockery_la-cmockery.lo -MD -MP -MF .deps/libcmockery_la-cmockery.Tpo -c src/cmockery.c  -fno-common -DPIC -o .libs/libcmockery_la-cmockery.o

... но я не вижу вариантов, которые могли бы обойти эту ошибку.

В " error: приведение от 'void *' к 'int' теряет точность ", я вижу, что я мог бы изменить (int) в cmockery.h на (intptr_t). И я подтвердил, что работает. Но так как я могу собрать Cmockery с ./configure и make, должен быть способ собрать его без изменения исходного кода.

1 Ответ

2 голосов
/ 03 января 2011

Использование gcc вместо g++ в моей системе превращает эту ошибку в предупреждение в моей системе (Mandriva Linux 2010.1 64-bit) и позволяет завершить компиляцию:

.
.
.
../cmockery-0.1.2/cmockery.c:248: warning: cast from pointer to integer of different size
.
.
.

Однако я чувствую необходимость указать, что, как правило, я осторожен, когда вижу целую толпу предупреждений о том, что является относительно распространенной платформой (Linux 64-bit / GCC и я бы предположил другие). Использование параметра -m32 для принудительной компиляции в 32-битный объектный файл не выдает никаких предупреждений, поэтому можно предположить, что исходный код, используемый как есть, может не быть 64-битным чистым. Это происходит независимо от того, используете вы автоинструмент или нет.

Я не знаю, о каком проекте идет речь, поэтому он вполне может быть в порядке, но в любом случае используйте его с осторожностью ...

EDIT:

Согласно этому ответу на вопрос OP о списке рассылки cmockery, текущий выпуск не является 64-битным чистым в настоящее время. Кажется, что ошибки / предупреждения были там по уважительной причине ...

...