【发布时间】:2016-04-14 18:10:55
【问题描述】:
我编译了一个供应商特定的 OpenGL 头文件,打算使用特定于硬件的静态库进行编译,但我使用 nVidia Quadro 4000 卡和库 (linux) 链接并运行。这就是我们的供应商所说的我们应该在主机环境中这样做,所以不用担心。
我发现了一些奇怪的东西。供应商特定的标头将 GLchar 类型化为“无符号字符”(叹气...),而 nVidia 标头将其类型化为“字符”。这些类型不一样,但它仍然“有效”。我不能将 char* 隐式转换为 unsigned char*,这会给我一个编译错误,但我可以链接并成功运行可能使用“char”原型构建的函数 (glGetUniformLocation) 库。
发生了什么?运行时是否通过确定“char”与“unsigned char”“足够接近”来解决它?或者在构建库时是否将“char”的出现扩展到一种或另一种符号?如果是这样,如果我重载具有所有三种符号的函数会发生什么?
编辑:注意 OpenGL 库使用 C-linkage,它解释了我在接受的答案中描述的特殊体验。
【问题讨论】: