无法从plotutils文档编译libplot示例程序

时间:2015-06-29 06:34:33

标签: c plot png

我正在尝试编译我在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文件夹中创建的每个目标文件的原因。

任何有关错误的帮助我都会得到或启发我做错的事情,并牢记我的最终目标是什么,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我设法通过以下步骤成功编译了libplot示例程序:

  1. 使用:brew install plotutils
  2. 通过Homebrew安装plotutils
  3. 找到(在/ usr / local /或您的Homebrew安装所在的位置)并将libplot.2.2.4.dylib链接到您要构建的C程序(在这种情况下,C程序是问题中提供的程序)
  4. 另外,请确保在标题搜索路径中包含plot.h标题文件。
  5. 通过以下步骤,我能够干净地编译上面的代码(带有下面显示的修改)并且能够导出下面显示的png。 Homebrew似乎让我省去了自己构建plotutils的麻烦。 Test.png: Output of libplot example program

    我将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);