LNK2019 / LNK2001错误:为什么库提供带有未实现功能的.cpp文件? (他们如何实施?)

时间:2014-03-03 08:57:44

标签: c++ visual-c++ wxwidgets lnk2019 mathgl

我想通过阅读SO和this MSDN article了解LNK2019错误的主旨。

我有一个为什么的问题和一个如何的问题(两者都已在标题中提出)。

为什么库会提供带有未实现功能的.cpp文件?我猜答案是:“所以最终用户可以实现这些功能他们自己,或“链接”其他一些事情。“(如果我错了请纠正我,但我会继续这个假设。)

例如,在下面的屏幕截图中(单击以查看大图),我显示了遇到的LNK2019错误以及有问题的文件wx.cpp

enter image description here

mglCanvasWX中的所有方法都没有实现(是的,我已向下滚动:-)。这里是wx.cpp a permanent Pastebin,而the output,以防有人想要查看代码,但我不会要求任何人这么做。

如何实施此类功能?

猜测它是包含这些实现的 .dll 文件。因此,我需要找到实现WindowToggleAlphaToggleLight等的 .dll 文件。 (我猜我可以忽略所有其他类型的文件, .obj .lib .exp 等)但是如何我是否知道 where 以找到那些 .dll 文件? - 甚至知道 .dll 文件 实施那些功能,因为它们是二进制(非人类可读)文件?

我很遗憾一次提出两个问题,但我认为这些是解决此链接器错误需要了解的基本内容。 (我觉得我错过了一个单一的概念,即使我需要在两个问题中提问。)提前感谢您提供任何指导,并且很抱歉添加到现有的LNK2019堆中有关SO的问题......


附录

这可能是相关的:

#      define MGL_EXPORT __declspec(dllexport)

但是我不确定这是否表明这个未实现的类被导出为DLL(这样的DLL有什么用途?),或者表明这个类必须 实现一个DLL文件(这会更有意义)。

另外,我说出我的问题的原因是“为什么会有一个库...”,这个项目中的另一个依赖项mgl-fltk提供了a similar source ,但 实现类似的类及其功能(并构建良好)!查看屏幕截图here。但是,它的类定义与mgl-wx不同,省略了MGL_EXPORT,暗示我FLTK 意图在外部实现。

class mglCanvasFL : public mglCanvasWnd

理论

好的,经过一番思考之后,我想出了一个理论,但只有经验丰富的软件开发人员可以告诉我它是否合理/有意义。

MathGL的开发人员可能根本没有实现这些定义吗?也就是说,MathGL是否可能还不支持wxWidgets?

请参阅原始MathGL源代码中的文件:

enter image description here

QT,FLTK和GLUT 所有实施他们的mglCanvasQTmglCanvasFLmglCanvasGLUT,例如

// qt.cpp

    void mglCanvasQT::Animation()   {   QMGL->animation(true);  }
    void mglCanvasQT::ToggleAlpha() {   QMGL->setAlpha(!QMGL->getAlpha());  }

// fltk.cpp

    void mglCanvasFL::Animation()   {   Fl::lock(); mgl_sshow_cb(0,mgl);    Fl::unlock();   }
    void mglCanvasFL::ToggleAlpha() {   Fl::lock(); mgl->toggle_alpha();    Fl::unlock();   }

// glut.cpp

    class mglCanvasGLUT : public mglCanvasGL
    {
    public:
        // ...
        void ToggleAlpha()  {   _mgl_key_up('r',0,0);   }
        void Animation()    {   _mgl_key_up('m',0,0);   }   ///< Run slideshow (animation) of frames
        // ...
    }

并且只有mglCanvasWX未实现,只有mglCanvasWX在其类名前面有MGL_EXPORT宏。

那么可能的解释是什么?那个WX支持还没有?或者,对WX的支持存在,但发现作为外部库(DLL)更容易提供?如果有经验的软件开发人员可以权衡这一点,我真的很感激......

1 个答案:

答案 0 :(得分:2)

Holy J. Skeet,我的理论证明是真的。

经过几个小时的实验(并写下这个问题),我开始意识到,或许wxWidgets并没有实现与MathGL一起使用。 (参见上面的“理论”编辑。)我在这个新的上下文中做了一些谷歌搜索,并且瞧! - 来自MathGL的维护者本人(他的名字我只是认可,因为它是上面7-Zip截图中的用户/组名称) -

  

MortenMacFly 1/22/11

     

您好,我想知道wx样本正在做什么。似乎有一个   存根已准备好,但尚未实现功能。我很乐意使用   这个库在wxWidgets项目中。任何提示?

     

Alexey Balakin 1/25/11

     

嗨,

     

基本上是的。多年前我从wxWidgets切换到Qt ......所以,   我已经忘记了许多wxWidget percularity并决定停止制作   基于wxWidget的工作窗口。有几个问题:MathGL   已经有2个(基于FLTK和Qt),我没有那么多时间   写|测试wxWidget一:(。

     

所以,现在你可以做以下事情:

     

1)使用MathGL生成的RGB位图来显示你的wxWidget图像   控制。这里有一个样本   http://mathgl.sourceforge.net/mathgl_en/mathgl_en_10.html#Drawing-in-memory

     

2)使用mgl / mgl_wx.h中定义的wxMathGL小部件。我非常希望它是什么   应该按原样工作,但我没有测试它:(

     

3)帮我写一下|测试wxMathGL小部件和类mglGraphWX哪个   将显示基于wxWidget.I(和其他我的控件)的窗口   想)会非常感激。

thread in which I found this也讨论了一些替代方案,但我不知道它们是否有效。