error C2062: 意外的类型“__int64”

在将公司项目从VS2013+Qt5.9.0+osg3.4.1升级到VS2017+Qt5.12.10+osg3.6.5后,遇到了编译错误,主要包括类型解析错误和枚举冲突。问题源于第三方库中定义的宏#define INT64 __int64与osg::Uniform文件中的枚举INT64冲突。通过调整头文件包含顺序解决了编译问题,但这种方法可能存在潜在隐患。建议避免在头文件中使用宏以减少类似问题的发生。

今天升级了一下公司的项目 vs2013 qt5.9.0 osg 3.4.1 升级到 vs2017 qt5.12.10 osg3.6.5,升级后编译的时候报错

error C2062: 意外的类型“__int64”

error C3805: “类型”: 意外标记,应输入“}”或者“,”

error C2039: “UNDEFINED”: 不是“osg::Uniform”的成员

 

点击后发现是在Uniform 文件的一个枚举INT64 对比老版本的文件发现没有此枚举

所以考虑可能有些文件和这个枚举冲突导致,后来通过慢慢的注释掉其他头文件引用,排查到引用的一个第三方库中的头文件中

有一个宏导致的冲突#define INT64           __int64

对此的解决办法,可以调整头文件的包含顺序,可以保证编译通过,但不清楚会不会给程序埋下隐患

 

思考:尽量不要在头文件中使用宏

### 关于 `uint64_t` 或 `int64_t` 未找到的配置错误解决方案 在编译过程中,如果遇到 `uint64_t` 或 `int64_t` 类型未找到的错误,通常是因为缺少必要的头文件或编译器选项。以下是可能的原因及解决方案: #### 可能原因 1. 缺少标准库头文件 `<stdint.h>` 或 `<inttypes.h>`。 2. 编译器未正确配置为支持 C99 标准。 3. 系统中缺少多架构支持(如 32 位 64 位库)。 #### 解决方案 ##### 1. 确保包含正确的头文件 确保源代码中包含以下头文件之一: ```c #include <stdint.h> ``` 或 ```c #include <inttypes.h> ``` 这些头文件定义了 `uint64_t` `int64_t` 类型[^1]。 ##### 2. 配置编译器以支持 C99 标准 某些旧版本的 GCC 默认不启用 C99 支持。可以通过添加 `-std=c99` 或 `-std=gnu99` 选项来解决此问题。例如: ```bash gcc -std=c99 your_program.c -o your_program ``` ##### 3. 检查系统是否缺少多架构支持 如果系统是多架构环境(如同时支持 32 位 64 位),但缺少某些库文件,可能会导致此类错误。例如,GCC 编译时可能需要 32 位库支持,而系统中未安装相关包。可以尝试安装以下软件包(以 Debian/Ubuntu 为例): ```bash sudo apt-get install libc6-dev-i386 ``` 对于其他发行版,请根据具体环境安装相应的多架构支持包[^1]。 ##### 4. 修改 `configure` 脚本 如果使用的是基于 `autoconf` 的项目,可以尝试通过以下方式解决: - 在运行 `./configure` 时,添加 `CFLAGS` 参数以强制启用 C99 支持: ```bash CFLAGS="-std=c99" ./configure ``` - 如果项目支持禁用多架构检测,可以尝试添加 `--disable-multilib` 参数: ```bash ./configure --disable-multilib ``` ##### 5. 检查工具链版本 确保使用的工具链版本支持所需的类型定义。例如,GCC 4.7.0 或更高版本通常已包含对 `uint64_t` `int64_t` 的支持[^1]。如果工具链版本过旧,建议升级到较新版本。 #### 示例代码 以下是一个简单的示例,展示如何正确使用 `uint64_t` `int64_t`: ```c #include <stdio.h> #include <stdint.h> int main() { uint64_t u_value = 18446744073709551615ULL; // 最大无符号 64 位值 int64_t i_value = -9223372036854775807LL; // 最大负数 64 位值 printf("Unsigned 64-bit value: %" PRIu64 "\n", u_value); printf("Signed 64-bit value: %" PRId64 "\n", i_value); return 0; } ``` #### 注意事项 - 如果仍然遇到问题,可以检查编译器输出的日志文件,定位具体的缺失文件或库。 - 确保开发环境中的所有依赖项均已正确安装。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值