【发布时间】:2016-01-05 16:11:41
【问题描述】:
在 Windows 上使用 MSVC 120、Visual Studio 2013 通过 CMake 编译源代码时出现以下错误。当我直接从 VisualStudio 构建时,我没有错误。只有在生成 CMake 构建文件后通过命令行构建时才会发生这种情况.
错误 C2664: 'void gluTessCallback(GLUtesselator *,GLenum,void (__stdcall *)(void))' : 不能从 'GLvoid 转换参数 3 (__cdecl * (void)' 到 'void (__stdcall *)(void)' 此转换需要 reinterpret_cast、C 样式转换或函数样式转换
实际代码是这个函数:
static void edgeFlagCallback(GLboolean)
{
//some code here
}
void MyClass:Foo()
{
gluTessCallback(tess, GLU_TESS_EDGE_FLAG ,reinterpret_cast<GLvoid ( *)()>(edgeFlagCallback));
}
它也可以在带有 GCC 的 Linux 上编译。也许我必须设置一些额外的编译器参数,但到目前为止我没有找到什么。另外我不明白这个错误,因为在这种情况下我确实使用了 cast。 这些是我在 CMake 中为 MSVC 项目添加的标志:
add_definitions(-DWIN32 -D_DEBUG -D_UNICODE -DUNICODE -D_LIB -D_CRT_SECURE_NO_WARNINGS)
【问题讨论】:
-
您使用的是哪个命令提示符? x86 还是 x64?
-
我尝试添加 Win64,但它看起来默认使用 x86 编译。在 VisualStudio 中我以 x64 为目标。也许我必须升级 CMake。我目前有 3.0 版
-
Visual Studio 应该带有几种不同的命令提示符,一种用于 x86,另一种用于 x64。您遇到的问题仅发生在 x86 上。
-
我明白了,但我不知道如何通过 CMake 命令提示符命令调用它。试过:cmake -G"Visual Studio 12 2013 Win64" 看起来它仍然使用 x86。
标签: c++ visual-c++ cmake