从C ++程序运行perl程序

时间:2011-10-01 20:18:09

标签: c++ perl

我有一个用于计算库存的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程序,所以任何提示都会有所帮助。

1 个答案:

答案 0 :(得分:5)

您看到的错误是因为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`

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