【发布时间】: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:是的,但是使用来自
<cstdlib>的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 我如何允许自己访问自己的计算机