c++ - 如何获取 libmathplot.a

标签 c++ wxwidgets

我想使用带有 gcc 编译器和 wxSmith 的 wxWidgets 绘制图形。有图标可以添加mpWindow,mpVector等等,但是我试编译的时候不行。所以我下载了 mathplot.h 文件并将其包含在内,但现在编译器说:

||=== Build: Debug in Lizenz_Logfile_Reader (compiler: GNU GCC Compiler) ===|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp||In member function 'void Lizenz_Logfile_ReaderFrame::parse()':|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp|187|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp|193|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
ld.exe||cannot find -lmathplot|
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 3 second(s)) ===|

我搜索了互联网,发现我可以自己编译 libmathplot.a,但是当我尝试时,我得到了错误:

||=== Build: Debug in libmathplot (compiler: GNU GCC Compiler) ===|
C:\wxWidgets-3.0.2\include\wx\platform.h|183|fatal error: wx/setup.h: No such file or directory|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

我正在关注 this answer in german ,上面说应该创建一个新的静态库项目,在main中添加mathplot.h和mathplot.cpp,将wxWidgets3.0.2\include添加到Project->Build Oprtions->Search路径 Project->Build Oprtions->Compiler 并编译它。还有什么我需要做的吗?感谢您的帮助。


编辑:链接答案的另一部分是也只包括 mathplot.cpp。 我试了一下如下

Lizenz_Logfile_ReaderMain.cpp:
#include "Lizenz_Logfile_ReaderMain.h"
#include <wx/msgdlg.h>

#include <wx/textfile.h>
#include "mathplot.h"


Lizenz_Logfile_ReaderMain.h:
#ifndef LIZENZ_LOGFILE_READERMAIN_H
#define LIZENZ_LOGFILE_READERMAIN_H

#include <wx/textfile.h>
#include <wx/list.h>
#include <wx/vector.h>
#include "mathplot.h"
#include "mathplot.cpp"

然后我收到关于在 mathplot 中重新定义的事物的大量错误:

||=== Build: Debug in Lizenz_Logfile_Reader (compiler: GNU GCC Compiler) ===|
D:\Lizenz_Logfile_Reader\mathplot.cpp|15|warning: #pragma implementation for 'mathplot.h' appears after file is included [enabled by default]|
D:\Lizenz_Logfile_Reader\mathplot.cpp||In member function 'bool mpWindow::SaveScreenshot(const wxString&, int, wxSize, bool)':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|2239|warning: 'bool wxImage::SaveFile(const wxString&, long int) const' is deprecated (declared at C:\wxWidgets-3.0.2\include/wx/image.h:560) [-Wdeprecated-declarations]|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp||In member function 'void Lizenz_Logfile_ReaderFrame::parse()':|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp|188|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
D:\Lizenz_Logfile_Reader\Lizenz_Logfile_ReaderMain.cpp|194|warning: comparison between signed and unsigned integer expressions [-Wsign-compare]|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZNK7mpLayer12GetClassInfoEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|78|multiple definition of `mpLayer::GetClassInfo() const'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|78|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN7mpLayerC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|80|multiple definition of `mpLayer::mpLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|80|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN7mpLayerC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|80|multiple definition of `mpLayer::mpLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|80|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN7mpLayer15GetColourSquareEi':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|91|multiple definition of `mpLayer::GetColourSquare(int)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|91|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZNK11mpInfoLayer12GetClassInfoEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|106|multiple definition of `mpInfoLayer::GetClassInfo() const'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|106|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer14wxCreateObjectEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|106|multiple definition of `mpInfoLayer::wxCreateObject()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|106|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|108|multiple definition of `mpInfoLayer::mpInfoLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|108|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|108|multiple definition of `mpInfoLayer::mpInfoLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|108|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerC2E6wxRectPK7wxBrush':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|118|multiple definition of `mpInfoLayer::mpInfoLayer(wxRect, wxBrush const*)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|118|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerC2E6wxRectPK7wxBrush':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|118|multiple definition of `mpInfoLayer::mpInfoLayer(wxRect, wxBrush const*)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|118|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerD2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|128|multiple definition of `mpInfoLayer::~mpInfoLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|128|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerD2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|128|multiple definition of `mpInfoLayer::~mpInfoLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|128|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayerD0Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|128|multiple definition of `mpInfoLayer::~mpInfoLayer()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|128|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer10UpdateInfoER8mpWindowR7wxEvent':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|134|multiple definition of `mpInfoLayer::UpdateInfo(mpWindow&, wxEvent&)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|134|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer6InsideER7wxPoint':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|139|multiple definition of `mpInfoLayer::Inside(wxPoint&)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|139|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer4MoveE7wxPoint':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|144|multiple definition of `mpInfoLayer::Move(wxPoint)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|144|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer15UpdateReferenceEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|150|multiple definition of `mpInfoLayer::UpdateReference()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|150|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer4PlotER4wxDCR8mpWindow':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|157|multiple definition of `mpInfoLayer::Plot(wxDC&, mpWindow&)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|157|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer11GetPositionEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|189|multiple definition of `mpInfoLayer::GetPosition()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|189|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN11mpInfoLayer7GetSizeEv':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|194|multiple definition of `mpInfoLayer::GetSize()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|194|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN12mpInfoCoordsC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|198|multiple definition of `mpInfoCoords::mpInfoCoords()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|198|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN12mpInfoCoordsC2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|198|multiple definition of `mpInfoCoords::mpInfoCoords()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|198|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN12mpInfoCoordsC2E6wxRectPK7wxBrush':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|203|multiple definition of `mpInfoCoords::mpInfoCoords(wxRect, wxBrush const*)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|203|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN12mpInfoCoordsC2E6wxRectPK7wxBrush':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|203|multiple definition of `mpInfoCoords::mpInfoCoords(wxRect, wxBrush const*)'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|203|first defined here|
obj\Debug\Lizenz_Logfile_ReaderMain.o||In function `ZN12mpInfoCoordsD2Ev':|
D:\Lizenz_Logfile_Reader\mathplot.cpp|208|multiple definition of `mpInfoCoords::~mpInfoCoords()'|
obj\Debug\Lizenz_Logfile_ReaderApp.o:D:\Lizenz_Logfile_Reader\mathplot.cpp|208|first defined here|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 4 warning(s) (0 minute(s), 5 second(s)) ===|

我已经按照答案中的建议删除了第 2610、2749-2751、2763、2847 和 2877 行中的 ::,这使得一些错误消失了,但现在显示了上面的错误日志。

最佳答案

首先,确保您的应用程序构建时没有使用 wxMathPlot(没有实际的#include,没有库等)。 YourWXdir/include 必须在 Project->Build Options->Search 中设置。

其次,将 mathplot.cpp 添加到您的项目,就像您应用中的任何其他文件一样。 #include mathplot.h 在你的应用程序需要 wxMathPlot API 的那些文件中,但每个文件只有一次(你已经复制了它)。不要#include mathplot.cpp。

重复的定义来自同时使用 mathplot.cpp 及其库。只选择一种使用方式。

有符号-无符号的转换在你的代码Lizenz_Logfile_ReaderMain.cpp中。

关于c++ - 如何获取 libmathplot.a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592884/

相关文章:

c++ - Microsoft Visual Studio 2017 中的 wxWidgets 设置

c++ - Visual Studio 中的 wxWidgets 链接问题

c++ - 单例模式 C++ 错误

c++ - 如何根据用户输入打开和读取文件 C++

c++ - 以 10 为基数到 n 基数的转换

c++ - 使用 Cygwin 编译 c++ wxWidgets

python - 高级启动画面我如何在我的代码中使用它

c++ - 使用 c++0x 标志编译 wxWidgets

c++ - 动态指针是否设置为空

c++ - 函数模板修改用顶级 const 声明的参数 : clang bug?