# 状況
大学でC++でグラフを描画する課題がでた。gnuplotを使うといいらしくてそれでやってみようということにした。自分の実行環境はmac os Mojave
brewでgnuplot自体はすぐにインストールできたものの、ターミナルからコマンドで使うのではなくてC++で書いて呼び出して使いたい。だけどそこからがめっちゃ大変だった。。。。
エラーポイント
①aquatermとxquartzとかいうのをインストールしてからgnuplotをインストールできない
まず、いろいろgnuplotのインスト方法を調べているとどうやらaquatermとxquartzをインストールしてからgnuplotをインストールする記事が多かった。なぜそうするのかはよくわからん。そこでこれらをインストールしてから
$ brew install gnuplot --with aqua
などとやると、aquatermなんてねえよと言われる。
brew list
として確認してもaquatermなどどこにもない。つまり認識されていないということらしい。
そこでどうすればいいかを書いてる記事もあったが何だかめんどくさそうだった。
そこで。
brew install gnuplot
で普通にインストールできた。
なんだよaquatermとかいらねえのかよ、でも後からこのせいでエラーでたら怖いなとは思いつつとりあえずターミナルから実行できるようになった。
で下のようにパイプを通して描画したいというのが本題
##②duplicate symbol 問題
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *gp;
gp=popen("gnuplot -persist","w");
fprintf(gp,"plot sin(x)\n");
pclose(gp);
return 0;
}
これを実行してうまく行けばグラフが出力される。はずだが。。。
duplicate symbol '_main' in:
/var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//cc9moxpo.o
/var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//ccbmRw03.o
duplicate symbol '_main' in:
/var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//cc9moxpo.o
/var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//cc9moxpo.o
ld: 2 duplicate symbols for architecture x86_64
collect2: error: ld returned 1 exit status
というエラーがでた。
つまりシンボルが重複しているということらしい。/var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//cc9moxpo.oと /var/folders/q3/y699mygx6qqg53lzw8ls14_r0000gn/T//ccbmRw03.o
で被ってるからだめだと。
で、いろいろ調べてもいろいろ試してみて結局わかったのは結局他のC++のファイルと同じディレクトリで実行していることが原因だった(gnuplot使ってないC++のファイルも同じエラーがでたので気づいた)
新たにディレクトリを作成して実行するとできた。
##まとめ
gnuplotは別にaquatermとか使わなくていいぞ