3

我想我通过阅读 SO 和这篇 MSDN 文章了解了 LNK2019 错误的要点。

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

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

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

在此处输入图像描述

类中的所有方法mglCanvasWX都没有实现(是的,我已经向下滚动了:-)。这是一个永久的 Pastebinwx.cpp是输出,以防有人想查看代码,但我不会要求任何人走这么远。

这些功能如何实现?

它是包含实现的.dll文件。因此,我需要找到实现、、等的.dll文件。(我猜我可以忽略所有其他类型的文件,.obj.lib.exp等)但是我怎么知道在哪里可以找到这些.dll文件?——甚至知道.dll文件可以实现这些功能,因为它们是二进制(非人类可读)文件?WindowToggleAlphaToggleLight

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


附录

这可能是相关的:

#      define MGL_EXPORT __declspec(dllexport)

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

另外,我提出我的问题“为什么要建立一个库...”的原因是该项目中的另一个依赖项mgl-fltk提供了类似的源,但确实实现了类似的类及其功能(并且构建良好)!在此处查看屏幕截图。然而,它的类定义与 不同mgl-wx,省略了MGL_EXPORT,这暗示我 FLTK打算在外部实现。

class mglCanvasFL : public mglCanvasWnd

理论

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

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

看,在原始的 MathGL 源代码中,有这些文件:

在此处输入图像描述

QT、FLTK 和 GLUT实现了它们的mglCanvasQT,mglCanvasFLmglCanvasGLUT,例如

// 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) 提供?如果有经验的软件开发人员可以对此进行权衡,我将非常感激......

4

1 回答 1

2

神圣的 J. Skeet,我的理论被证明是正确的。

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

MortenMacFly 2011 年 1 月 22 日

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

阿列克谢巴拉金 1/25/11

你好,

基本上是的。多年前我从 wxWidgets 切换到 Qt ......所以,我已经忘记了许多 wxWidget 细节,并决定停止基于 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 的控件的窗口。我(以及我认为的其他)将非常感谢。

我发现这个的线程也讨论了一些替代方案,尽管我不知道它们是否有效。

于 2014-03-03T09:50:22.667 回答