Скомпилируйте первый пример ошибки mathgl

тестовый файл с именем 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» та же ошибка

1

Решение

Я осознал точно такую ​​же проблему и сумел ее решить.

Если вы сделали установку правильно, как вы сказали. Тогда вам просто нужно добавить -lmgl в конце строки! Как это:

g++ ml.o -lmgl

Как уже упоминал Люк, у вас есть ошибка компоновки, поэтому компиляция не пострадает. Вот объяснение этого поведения:

неопределенная ссылка на символ, даже если nm указывает, что этот символ присутствует в общей библиотеке

Надеюсь, что это решило вашу проблему.

Питер

3

Другие решения

У вас есть ошибка связи. Чтобы решить эту проблему вам нужно связать с MGL. Похоже, вы пытаетесь, но это не работает.

Во-первых, я бы опустил пространство между l и mgl. so

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

Если это не сработает, проверьте, есть ли какие-либо другие библиотеки, с которыми вам нужно ссылаться. Посмотрите, выдает ли g ++ ошибки, что он не может найти mgl.

Надеюсь, это поможет.

0

По вопросам рекламы [email protected]