我正在尝试编译我在plotutils文档中找到的示例代码。我为plot.h头文件添加了适当的搜索路径,并将二进制文件链接到安装plotutils 2.6时创建的每个目标文件。我在OS X 10.10.3上使用Xcode 6.3.2而且我是C编程或使用Xcode的新手。
我尝试编译的示例代码是:
#include <stdio.h>
#include <plot.h>
#define MAXORDER 12
void draw_c_curve (plPlotter *plotter, double dx, double dy, int order)
{
if (order >= MAXORDER)
/* continue path along (dx, dy) */
pl_fcontrel_r (plotter, dx, dy);
else
{
draw_c_curve (plotter,
0.5 * (dx - dy), 0.5 * (dx + dy), order + 1);
draw_c_curve (plotter,
0.5 * (dx + dy), 0.5 * (dy - dx), order + 1);
}
}
int main ()
{
plPlotter *plotter;
plPlotterParams *plotter_params;
/* set a Plotter parameter */
plotter_params = pl_newplparams ();
pl_setplparam (plotter_params, "PAGESIZE", "letter");
/* create a Postscript Plotter that writes to standard output */
if ((plotter = pl_newpl_r ("ps", stdin, stdout, stderr,
plotter_params)) == NULL)
{
fprintf (stderr, "Couldn’t create Plotter\n");
return 1;
}
if (pl_openpl_r (plotter) < 0) /* open Plotter */
{
fprintf (stderr, "Couldn’t open Plotter\n");
return 1;
}
pl_fspace_r (plotter, 0.0, 0.0, 1000.0, 1000.0); /* set coor system */
pl_flinewidth_r (plotter, 0.25); /* set line thickness */
pl_pencolorname_r (plotter, "red"); /* use red pen */
pl_erase_r (plotter); /* erase graphics display */
pl_fmove_r (plotter, 600.0, 300.0); /* position the graphics cursor */
draw_c_curve (plotter, 0.0, 400.0, 0);
if (pl_closepl_r (plotter) < 0) /* close Plotter */
{
fprintf (stderr, "Couldn’t close Plotter\n");
return 1;
}
if (pl_deletepl_r (plotter) < 0) /* delete Plotter */
{
fprintf (stderr, "Couldn’t delete Plotter\n");
return 1;
}
return 0;
}
Xcode标识的两个问题是:
Undefined symbols for architecture x86_64:
"__pl_z_maybe_output_image", referenced from:
__maybe_output_image in b_defplot.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
b_defplot.o和其他目标文件是在我尝试安装plotutils 2.6时生成的,首先下载它,并执行./configure,make和make install。
我的最终目标是在我写的程序中使用libplot包,这需要生成一些图,我希望我的程序二进制文件是自包含的(即如果我执行我的程序二进制文件)在没有安装plotutils的任何其他计算机上,它应该仍然有效)。这就是为什么我在安装plotutils时将我的二进制文件链接到libplot文件夹中创建的每个目标文件的原因。
任何有关错误的帮助我都会得到或启发我做错的事情,并牢记我的最终目标是什么,我将不胜感激。
答案 0 :(得分:0)
我设法通过以下步骤成功编译了libplot示例程序:
brew install plotutils
libplot.2.2.4.dylib
链接到您要构建的C程序(在这种情况下,C程序是问题中提供的程序) plot.h
标题文件。通过以下步骤,我能够干净地编译上面的代码(带有下面显示的修改)并且能够导出下面显示的png。 Homebrew似乎让我省去了自己构建plotutils的麻烦。
我将if ((plotter = pl_newpl_r ("ps", stdin, stdout, stderr, plotter_params)) == NULL)
替换为if ((plotter = pl_newpl_r ("png", stdin, fp, stderr, plotter_params)) == NULL)
,其中fp
的定义如下:
FILE *fp;
fp = fopen("/Users/username/path/Test.png", "w");
// rest of example code shown above
fclose(fp);