C++ C++;包装器的链接器问题

C++ C++;包装器的链接器问题,c++,linker,wrapper,C++,Linker,Wrapper,我有一个库opengl.lib,它包含所有opengl函数的包装函数。这些函数在它们自己的名称空间中声明,以便包装器函数可以使用与opengl函数相同的名称命名。所以在包装函数中,opengl函数是通过::gl***()调用的 现在的问题是,当我在应用程序中使用这个opengl.lib并包含我自己的“opengl.h”时,出于某种原因,会直接调用真正的opengl函数,而不是我的包装函数 我已经确定我没有包含任何真正的opengl.h,所以这一定是某种链接器问题。我如何解决它?我在库路径中也有真

我有一个库opengl.lib,它包含所有opengl函数的包装函数。这些函数在它们自己的名称空间中声明,以便包装器函数可以使用与opengl函数相同的名称命名。所以在包装函数中,opengl函数是通过::gl***()调用的

现在的问题是,当我在应用程序中使用这个opengl.lib并包含我自己的“opengl.h”时,出于某种原因,会直接调用真正的opengl函数,而不是我的包装函数

我已经确定我没有包含任何真正的opengl.h,所以这一定是某种链接器问题。我如何解决它?我在库路径中也有真正的opengl库,因为否则我的opengl.lib中会出现链接器错误,因为它使用真正的opengl函数。所以真正的opengl库和我的opengl.lib以某种方式混合在一起,链接器决定使用真正的opengl.lib而不是我的

我知道我可以通过将包装器函数重命名为其他函数来解决这个问题,但我希望使用相同的名称

这个问题与我先前的问题有关


我使用VisualC++优化禁用。

你的包装是否足够薄以至于它们被内联?

是实际的OpenGL.h,和你的包装头文件命名相同吗?如果是,您可能是在未意识到的情况下包含了它,因为编译器在用户定义的路径之前搜索系统路径。

查看预处理的cpp文件对于解决此类问题非常有帮助


这将生成一个.i文件

在构建opengl.lib时,您只需与真实的opengl库链接即可。确保在使用您自己的库的项目中没有任何对真实opengl库的引用。如果没有对实库的任何引用,则无法调用实函数。完成后,请确保使用了正确的命名空间

// Call OpenGL::glFunction();
using namespace OpenGL;
glFunction();

问题不在于你发布的定义,问题在于你的调用。你能发布你如何调用函数的相关代码吗


OpenGL::glFunction()将是我将如何做到这一点,它将工作。

介意给出一个包装器函数和调用的示例吗?嘿,懒鬼!有进展吗?:)不,这不是问题,你所说的足够瘦是什么意思?一个简单地返回另一个函数的值并以不同的顺序调用参数的函数就是“瘦”包装器的一个例子。
// Call OpenGL::glFunction();
using namespace OpenGL;
glFunction();