【问题标题】:Compile the first mathgl sample error编译第一个 mathgl 示例错误
【发布时间】:2014-11-27 17:07:20
【问题描述】:

一个名为 ml.cc 的测试文件,我已经将 mathgl 头文件安装到 /usr/local/include 和 libmgl.a 到 /usr/local/lib

#include <mgl2/mgl.h>
int main()
{
   mglGraph gr;
   gr.FPlot("sin(pi*x)");
   gr.WriteFrame("test.png");
   return 0;

}

“g++ -c ml.cc”可以工作,但是“g++ ml.cc”不工作,错误是

/tmp/ccPzPcZt.o: In function `mglGraph::mglGraph(int, int, int)':
ml.cc:(.text._ZN8mglGraphC2Eiii[_ZN8mglGraphC5Eiii]+0x3b): undefined reference to     `mgl_create_graph_gl'
ml.cc:(.text._ZN8mglGraphC2Eiii[_ZN8mglGraphC5Eiii]+0x54): undefined reference to  `mgl_create_graph'
/tmp/ccPzPcZt.o: In function `mglGraph::~mglGraph()':
ml.cc:(.text._ZN8mglGraphD2Ev[_ZN8mglGraphD5Ev]+0x28): undefined reference to `mgl_use_graph'
ml.cc:(.text._ZN8mglGraphD2Ev[_ZN8mglGraphD5Ev]+0x42): undefined reference to `mgl_delete_graph'
/tmp/ccPzPcZt.o: In function `mglGraph::SetFontSize(double)':
ml.cc:(.text._ZN8mglGraph11SetFontSizeEd[_ZN8mglGraph11SetFontSizeEd]+0x2a): undefined   reference to `mgl_set_font_size'
/tmp/ccPzPcZt.o: In function `mglGraph::WriteFrame(char const*, char const*)':
ml.cc:(.text._ZN8mglGraph10WriteFrameEPKcS1_[_ZN8mglGraph10WriteFrameEPKcS1_]+0x2b):   undefined reference to `mgl_write_frame'
/tmp/ccPzPcZt.o: In function `mglGraph::FPlot(char const*, char const*, char const*)':
ml.cc:(.text._ZN8mglGraph5FPlotEPKcS1_S1_[_ZN8mglGraph5FPlotEPKcS1_S1_]+0x30): undefined    reference to `mgl_fplot'
collect2: error: ld returned 1 exit status

“g++ -L /usr/local/lib/ -l mgl ml.o”也是同样的错误

【问题讨论】:

    标签: c++ compiler-errors mathgl


    【解决方案1】:

    我遇到了完全相同的问题并设法解决了。

    如果您按照您所说的正确进行了安装。然后你只需要在行尾添加 -lmgl !像这样:

    g++ ml.o -lmgl
    

    正如卢克已经提到的,你有一个链接错误,因此编译不受影响。以下是对此行为的解释:

    undefined reference to symbol even when nm indicates that this symbol is present in the shared library

    希望这能解决您的问题。

    彼得

    【讨论】:

    • 是的,你是对的! g++ ml.cc -lmgl -o ml 确实有效。
    • 你知道如何用 CMakeLists.txt 解决同样的问题吗?
    【解决方案2】:

    您有一个链接错误。要解决这个问题,您需要链接到 mgl。看起来你正在尝试,但它不起作用。

    首先,我将删除lmgl. so 之间的空格

    g++ -L /usr/local/lib/ -lmgl ml.o
    

    如果这不起作用,请检查是否有任何其他库需要链接。查看 g++ 是否会抛出无法找到 mgl 的错误。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多