【问题标题】:running perl program from C++ program从 C++ 程序运行 perl 程序
【发布时间】:2011-10-01 20:18:08
【问题描述】:

我有一个 C++ 程序来计算库存,当它低于某个水平时,我想调用我的 perl 程序,它将订单详细信息写入数据库。 我阅读了关于从 C++ 调用 Perl 的文档,我正在尝试这个示例代码

#include <EXTERN.h>
#include <perl.h>
static PerlInterpreter *my_perl;
int main(int argc, char **argv, char **env)
{
    char *args[] = { NULL };
    PERL_SYS_INIT3(&argc,&argv,&env);
    my_perl = perl_alloc();
    perl_construct(my_perl);
    perl_parse(my_perl, NULL, argc, argv, NULL);
    PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
    /*** skipping perl_run() ***/
    call_argv("showtime", G_DISCARD | G_NOARGS, args);
    perl_destruct(my_perl);
    perl_free(my_perl);
    PERL_SYS_TERM();
}

我尝试编译,但出现以下错误

g++ fn-test.cpp -o t 'perl -MExtUtils::Embed -e ccopts -e ldopts'
g++: perl -MExtUtils::Embed -e ccopts -e ldopts: No such file or directory
fn-test.cpp:2:24: fatal error: EXTERN.h: No such file or directory
compilation terminated.

我正在开发 ubuntu,所以我进入 cpan 并运行

force install ExtUtils::Embed

它做了一段时间,现在当我再次尝试编译时,我得到了同样的错误。 这是我第一次尝试从 C++ 调用 Perl 程序,所以任何提示都会有所帮助。

【问题讨论】:

  • 你有必要在 Perl 和 C++ 之间建立一对高的夫妇吗?如果没有,你可以做一个 system("perl myscript.pl")
  • 这就是我从命令行运行 perl 程序的方式...你的意思是我在我的 C++ 程序中也这样做
  • @itcplpl:是的,但是使用来自&lt;cstdlib&gt;system() 函数。
  • 刚刚运行它,它给了我以下错误 Can't locate Date/Manip.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.15.2/ i686-linux /usr/local/lib/perl5/site_perl/5.15.2 /usr/local/lib/perl5/5.15.2/i686-linux /usr/local/lib/perl5/5.15.2 .) 我进入CPAN 并运行了 force install Date::Manip,但它似乎不起作用......任何建议......我在运行 force install ExtUtils::Embed 之前让它工作了:-(
  • 我收到以下错误 >Building Date-Manip !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!错误:无法创建 '/usr/local/lib/perl5/site_perl/5.15.2/Date' 没有对 '/usr/local/lib/perl5/site_perl/5.15.2/Date' 的写入权限!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!在 /usr/local/lib/perl5/5.15.2/Module/Build/Base.pm 第 3574 行 SBECK/Date-Manip-6.25.tar.gz ./Build install -- NOT OK 在此命令期间失败:SBECK/Date -Manip-6.25.tar.gz : 安装 NO 我如何允许自己访问自己的计算机

标签: c++ perl


【解决方案1】:

您看到的错误是因为 EXTERN.h 不在包含路径中。
看起来它不在您的 g++ 命令行上,因为 perl 脚本失败了

你能跑吗

perl -MExtUtils::Embed -e ccopts -e ldopts

本身?这是为您提供所需 g++ 选项的脚本。 您是否在命令行中使用 backticks () 作为 perl 周围的引号?这将导致 perl 命令运行。

g++ fn-test.cpp -o t `perl -MExtUtils::Embed -e ccopts -e ldopts`

反引号将运行反引号内的内容,然后将命令的输出放在命令行上。

【讨论】:

  • 是的,我可以自己运行 perl -MExtutils::。现在当我运行 g++ fn-test.cpp -o t perl -MExtUtils::Embed -e ccopts -e ldopts 时,它似乎现在用反引号编译了
  • 知道为什么它可能通过在 ExtUtils::Embed 上运行强制安装来删除 Date/Manip.pm
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 2011-07-10
  • 2012-10-08
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
相关资源
最近更新 更多