我编译了一个特定于供应商的OpenGL Headers ,用于使用特定于硬件的静态库进行编译,但我使用nVidia Quadro 4000卡和库(linux)进行链接和运行 . 这就是我们的供应商说我们应该在主机环境中这样做,所以不用担心 .
我找到了一些奇怪的东西 . 特定于供应商的 Headers 将GLchar typedeffed作为'unsigned char'(叹息......),而nVidia Headers 类型将其设置为'char' . 这些类型不一样,但它仍然“有效” . 我无法隐式地将char *转换为unsigned char *,这给了我一个编译错误,但我可以链接并成功运行可能使用'char'原型构建的函数(glGetUniformLocation)库 .
发生了什么?运行时是否通过判断'char'与'unsigned char'“足够接近”来解决它?或者在 Build 图书馆时,“char”的出现是否扩展到一个签名或另一个签名?如果是这样,如果我使用所有三种签名重载函数会发生什么?
编辑:注意OpenGL库使用C-linkage来解释我在接受的答案中描述的特定体验 .