我如何围绕GCC工作;错误:从‘;SourceLocation*’;至‘;int’;“失去精度”;编译cmockery.c时出错?

我如何围绕GCC工作;错误:从‘;SourceLocation*’;至‘;int’;“失去精度”;编译cmockery.c时出错?,gcc,casting,compilation,cmockery,Gcc,Casting,Compilation,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:

我需要将使用的单元测试添加到现有的构建环境中,该环境使用手工制作的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
以下是cmockery.c的第247:248行:

static void initialize_source_location(SourceLocation * const location) {
    assert_true(location);
assert\u true
在cmockery.h的第154行定义:

#define assert_true(c) _assert_true((int)(c), #c, __FILE__, __LINE__)
因此,问题(正如错误所述)是GCC不喜欢从“SourceLocation*”转换为“int”

我可以使用
/configure
make
构建Cmockery(在Linux上,如果我
首先导出CFLAGS=-I/usr/include/malloc
),而不会出现任何错误。我试着在运行
make
(在
/configure
之后)时查看编译cmockery.c的命令行:

…但我看不到任何解决此错误的方法


在“”中,我可以将cmockery.h中的
(int)
更改为
(intptr\t)
。我已经证实了这一点。但是,由于我可以使用
/configure
make
构建Cmockery,因此必须有一种方法可以让它在不修改源代码的情况下进行构建。

在我的系统上使用
gcc
而不是
g++
将该错误转化为系统上的警告(Mandriva Linux 2010.1 64位),并允许编译完成:

.
.
.
../cmockery-0.1.2/cmockery.c:248: warning: cast from pointer to integer of different size
.
.
.
然而,我觉得有必要指出,当我在一个相对常见的平台(Linux64位/GCC,我假设还有其他平台)上看到一大堆警告时,我通常都很谨慎。使用
-m32
选项强制编译32位对象文件不会产生任何警告,因此可以假定原样使用的源代码可能不是64位干净的。无论是否使用自动工具,都会发生这种情况

我不知道有问题的项目,所以它可能很好,但在任何情况下都要小心使用

编辑:


根据OP对cmockery邮件列表的问题的回答,目前的版本不是64位的干净版本。这些错误/警告似乎有一个很好的理由……

好吧,它让你知道指针(现在是64个)比int(可能是32个)大。我想知道一个双精度转换,或者类似(int)((long-long)x)和0x00000000ffffffff)的东西是否足以欺骗它。您是否尝试过使用
gcc
而不是
g++
?使用
g++
偶尔会改变语言中的一些东西。David,将强制转换更改为(intptr_t)是可行的,但我不必修改Cmockery source.thkala,使用gcc会将错误更改为警告。谢谢Cmockery(发布时)不是64位干净的:
.
.
.
../cmockery-0.1.2/cmockery.c:248: warning: cast from pointer to integer of different size
.
.
.