我从不使用macs或xcode,但我现在需要为osx和ios构建一个C库。C代码在windows和android上构建得很好,但在xcode中,我得到了数百个红色的excmalation标记图标,表明这一点:
Semantic issue
cast from pointer to smaller type
'int' loses information
下面是一行代码的示例,其中指示了此错误
fixturesArray.push_back((int)fixture->GetUserData());
我已经有一个问题构建与未使用的变量,我删除了一个标志-Werror,这修复了这个特殊的问题。有什么类似的我可以做这个问题?我假设这个问题是警告被视为错误。这里是其他标志仍然存在。
-Wall -Wno-long-long -Wno-variadic-macros -DNDEBUG -DDEBUG=0
更新:只有大约10个这样的错误示例(其他100个是警告)如果我在所有这些情况下将'int'改为'int 64',那么我就可以构建了。但我不想这样做,我确信这会导致问题,这不是程序应该如何工作的。
更新2:同样保持代码原样,只删除这些标志就可以进行构建
-Wno-long-long
2条答案
按热度按时间wz1wpwve1#
这段代码在windows下运行良好,因为visual studio默认创建32位的二进制文件,而android是32位的平台,在这些平台上指针是32位的,
int
也是32位的,所以可以将指针存储在int
类型的向量或变量中。如果你的目标是Mac OS X,Xcode将默认构建64位和32位的二进制文件,并且你得到的警告实际上是告诉你在64位平台上将指针放在
int
变量中不是一个好主意,因为指针的一半值丢失了,你以后将无法检索它。在您的案例中,您可以采用两种不同的解决方案:
int
更改为intptr_t
并修复因此停止工作的任何内容。在第二种情况下,你可以通过改变xcode上的一些选项来禁止构建64位二进制文件,而在mac os上只使用32位二进制文件。要做到这一点,请从target的“构建设置”中的“有效体系结构”设置中删除
x86_64
字符串(如果找不到该设置,请在google images中搜索xcode valid architectures build setting)50pmv0ei2#
好吧,似乎
GetUserData()
返回一个指针。这似乎有一个sizeof(void*) > sizeof(int)
,所以强制转换会切断一些东西编辑:如果它能与int64一起工作,这证实了我的假设(你似乎坐在一台64位机器前)。我不知道你想做什么,但将指针转换为整数是一个坏主意。我建议你将
fixturesArray
作为一个合适的值类型的容器,如果你想让它更独立于架构工作的话。