Code::Blocks linux glext.h“对 uint64_t 的引用不明确”

Posted

技术标签:

【中文标题】Code::Blocks linux glext.h“对 uint64_t 的引用不明确”【英文标题】:Code::Blocks linux glext.h "reference to uint64_t is ambiguous" 【发布时间】:2014-08-30 09:55:22 【问题描述】:

我正在使用 Xubuntu 14.04 中的 Code::Blocks 制作一个 OpenGL 应用程序,并从源代码安装 GLFW3。在 eclipse CDT 中它可以工作,但在这个 IDE 中,编译时会显示一条错误消息:

[...]
/usr/include/GL/glext.h|1404|error: reference to ‘uint64_t’ is ambiguous|
/usr/include/stdint.h|55|note: candidates are: typedef long unsigned int uint64_t|
third_party/glm/fwd.hpp|907|note:                 typedef glm::detail::uint64                 glm::uint64_t|
/usr/include/GL/glext.h|1404|error: ‘uint64_t’ does not name a type|
/usr/include/GL/glext.h|1405|error: reference to ‘int64_t’ is ambiguous|
/usr/include/x86_64-linux-gnu/sys/types.h|197|note: candidates are: typedef long int int64_t|
third_party/glm/fwd.hpp|305|note:                 typedef glm::detail::int64 glm::int64_t|
/usr/include/GL/glext.h|1405|error: ‘int64_t’ does not name a type|
/usr/include/GL/glext.h|1478|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|1479|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|1480|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|1482|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|1483|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|1547|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|1548|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|2447|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|2591|error: reference to ‘uint64_t’ is ambiguous|
/usr/include/stdint.h|55|note: candidates are: typedef long unsigned int uint64_t|
third_party/glm/fwd.hpp|907|note:                 typedef glm::detail::uint64 glm::uint64_t|
/usr/include/GL/glext.h|2591|error: ‘uint64_t’ does not name a type|
/usr/include/GL/glext.h|2593|error: typedef ‘GLuint64’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2593|error: ‘PFNGLGETTEXTUREHANDLEARBPROC’ was not declared in this scope|
/usr/include/GL/glext.h|2594|error: typedef ‘GLuint64’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2594|error: ‘PFNGLGETTEXTURESAMPLERHANDLEARBPROC’ was not declared in this scope|
/usr/include/GL/glext.h|2595|error: typedef ‘PFNGLMAKETEXTUREHANDLERESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2595|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2596|error: typedef ‘PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2596|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2597|error: typedef ‘GLuint64’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2597|error: ‘PFNGLGETIMAGEHANDLEARBPROC’ was not declared in this scope|
/usr/include/GL/glext.h|2598|error: typedef ‘PFNGLMAKEIMAGEHANDLERESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2598|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2598|error: expected primary-expression before ‘access’|
/usr/include/GL/glext.h|2599|error: typedef ‘PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2599|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2600|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|2601|error: ‘GLuint64’ does not name a type|
/usr/include/GL/glext.h|2602|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|2603|error: ‘GLuint64’ does not name a type|
/usr/include/GL/glext.h|2604|error: typedef ‘PFNGLISTEXTUREHANDLERESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2604|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2605|error: typedef ‘PFNGLISIMAGEHANDLERESIDENTARBPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|2605|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|2606|error: ‘GLuint64EXT’ has not been declared|
/usr/include/GL/glext.h|2607|error: ‘GLuint64EXT’ does not name a type|
/usr/include/GL/glext.h|2608|error: ‘GLuint64EXT’ has not been declared|
/usr/include/GL/glext.h|7547|error: ‘GLint64’ has not been declared|
/usr/include/GL/glext.h|7548|error: ‘GLuint64’ has not been declared|
/usr/include/GL/glext.h|8235|error: typedef ‘GLuint64’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|8235|error: ‘PFNGLGETTEXTUREHANDLENVPROC’ was not declared in this scope|
/usr/include/GL/glext.h|8236|error: typedef ‘GLuint64’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|8236|error: ‘PFNGLGETTEXTURESAMPLERHANDLENVPROC’ was not declared in this scope|
/usr/include/GL/glext.h|8237|error: typedef ‘PFNGLMAKETEXTUREHANDLERESIDENTNVPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|8237|error: ‘GLuint64’ was not declared in this scope|
/usr/include/GL/glext.h|8238|error: typedef ‘PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC’ is initialized (use decltype instead)|
/usr/include/GL/glext.h|8238|error: ‘GLuint64’ was not declared in this scope|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

编译器是GNU GCC,代码是c++11。链接库的顺序如下:

X11
pthread
Xrandr
Xi
Xxf86vm
rt
m
GL

链接器搜索目录:

/usr/lib
/usr/local/lib
/usr/include           *Tried in Compiler search directories too
/usr/local/include     *Tried in Compiler search directories too

如果您还需要什么,尽管问。 PD:我不直接包含 GL 标头,glfw3 为我做。

【问题讨论】:

这个问题与链接无关。我最好向我们展示你的源代码。 【参考方案1】:

似乎,在您的代码(或 GLFW3 的代码)中,您有类似的内容:

using namespace glm::detail;

这会在您的命名空间中带来uint64_t 的其他定义。如果要指定要使用的类型,可以删除using namespace 或完全指定要使用的类型;可以是::uint64_tglm::detail::uint64_t

作为另一种解决方案,尝试更改包含文件的顺序。

【讨论】:

以上是关于Code::Blocks linux glext.h“对 uint64_t 的引用不明确”的主要内容,如果未能解决你的问题,请参考以下文章

如何设置Code :: Blocks构建选项以运行plplot?

Code::Blockswindows 环境下编译 Code::Blocks(已修正)

如何直接编译最初用 code::blocks 编写的代码

code::blocks调试

Code::Blocks

code blocks主题颜色配置