gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:13:01 25 4
gpt4 key购买 nike

我正在尝试编译在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 识别的 2 个问题是:

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)

当我尝试安装plotutils 2.6时,首先下载它,然后执行./configure、make和make install,生成了b_defplot.o和其他目标文件。

我的最终目标是在我正在编写的程序中使用 libplot 包,该程序需要生成一些图,并且我希望我的程序二进制文件是独立的(即,如果我在任何其他没有安装plotutils的计算机,它应该仍然可以工作)。这就是为什么我将我的二进制文件与当我如上所述安装plotutils时在libplot文件夹中创建的每个对象文件链接的原因。

任何有关我遇到的错误的帮助或启发我做一些非常错误的事情并记住我的最终目标是什么,将不胜感激。

最佳答案

我按照以下步骤成功编译了 libplot 示例程序:

  1. 通过 Homebrew 安装plotutils:brew installplotutils
  2. 找到(在/usr/local/中或 Homebrew 安装所在的任何位置)并将 libplot.2.2.4.dylib 链接到您尝试构建的 C 程序(在本例中为 C程序是问题中提供的程序)。
  3. 另请确保在 header 搜索路径中包含 plot.h header 文件。

通过遵循这些步骤,我能够干净地编译上述代码(经过如下所示的修改),并能够导出如下所示的 png。 Homebrew 似乎帮我省去了自己构建plotutils 的麻烦。 Test.png: Output of libplot example program

我用 if ((plotter = pl_newpl_r ("png") 替换了 if ((plotter = pl_newpl_r ("ps", stdin, stdout, stderr,plotter_params)) == NULL) 、stdin、fp、stderr、plotter_params)) == NULL) 其中 fp 定义如下:

文件*fp;
fp = fopen("/Users/用户名/path/Test.png", "w");
//上面显示的示例代码的其余部分
fclose(fp);

关于c - 无法从plotutils文档编译libplot示例程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31109181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com