我从不使用mac或xcode,但我现在需要为osx和ios构建一个C ++库。 C ++代码适用于windows和android,但在xcode中,我得到数百个这些红色激励标记图标,表示:
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'更改为'int64',那么我可以构建。但是我不想这样做,我确定它会造成问题,这不是程序应该如何工作的。
UPDATE2:同样保留代码,只需删除这些标志就可以构建 -Wno-长隆
这个代码适用于windows,因为visual studio默认会创建32位二进制文件,android是一个32位平台。在这些平台中,指针是32位,int
也是32位,因此可以将指针存储在int
类型的向量或变量中。
如果你的目标是Mac OS X,Xcode将默认构建64位和32位二进制文件,并且你得到的警告实际上告诉你在64位平台上将指针放在int
变量中并不是一个好主意,因为指针值的一半会丢失,您将无法在以后检索它。
您可以在案例中追逐两种不同的解决方案:
int
更改为size_t
并修复因此而停止工作的任何内容。在第二种情况下,您可以通过更改xcode上的某些选项来禁用构建64位二进制文件并仅在mac os上使用32位二进制文件。要执行此操作,请从目标的“构建设置”中的“有效体系结构”设置中删除x86_64
字符串(如果找不到该设置,请搜索google图像以获取xcode valid architectures build setting)
好吧,似乎GetUserData()
返回一个指针。这似乎有一个sizeof(void*) > sizeof(int)
所以铸造削减了一些东西
编辑:如果它适用于int64,这证实了我的假设(你似乎坐在64位机器前)。我不确定你要做什么,但是对整数的指针是一个坏主意。我建议你让fixturesArray
成为一个合适的值类型的容器,如果你想让它更独立于架构工作。