Как мне обойти GCC "ошибка: приведение от" SourceLocation* "к" int "теряет точность" при компиляции cmockery.c?

Мне нужно добавить модульные тесты, используя 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

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

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

1 ответ

Решение

С помощью 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-битным. Это происходит независимо от того, используете вы автоинструмент или нет.

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

РЕДАКТИРОВАТЬ:

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

Другие вопросы по тегам