【发布时间】:2021-12-18 19:21:38
【问题描述】:
我正在将我当前的项目链接到一个编译良好的遗留 C++ 项目的库。
但是当我尝试在我当前的新项目中使用相同的旧项目的 API 时,它会在以下行抛出 error: asigning to uint32_t * (aka unsigned long *) from incompatible type unsigned int *:
uint32_t *curval = static_cast<unsigned *>(storage_allocator_->ReserveUsingMalloc(getValSize());
我知道如果我在那个遗留项目中简单地将static_cast<unsigned *> 更改为static_cast<uint32_t *> ,上述错误将得到解决。
很遗憾,出于某些真正的考虑,我不能修改那个遗留项目。
那么,如何在我当前的 CMakeLists.txt 或任何其他选项中禁用此编译检查?
【问题讨论】:
-
unsigned int不是必需的 32 位,它似乎根据您的项目而变化。选择目标 32 位而不是 64 位可能会解决您的问题。 -
虽然
long可能是 32 位宽,但uint32_t基于long是相当不寻常的。遗留项目是否自己定义了uint32_t类型(例如typedef)?作为对这个问题以及如何解决它的猜测,也许遗留项目是为long是 32 位的 32 位系统开发的,但现在你正在构建一个long是的 64 位系统64位宽?也许您应该要求编译器以 32 位模式构建? -
是的,我当前的项目正在构建 64 位
-
假设您使用 GCC,在构建和链接时添加
-m32标志。 -
@Someprogrammerdude 我正在使用 Clang 进行编译