2011-10-01 98 views
4

我有一個C++程序來計算庫存,當它降到一定的水平我想打電話給我的Perl程序,它會寫訂單詳細信息到數據庫。 我讀了從C++調用Perl的文檔,我試着此示例代碼運行perl程序從C++程序

#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程序,因此任何提示都會有所幫助。

+2

Perl和C++之間是否需要一對夫妻?如果沒有,你可以做一個系統(「perl的myscript.pl」) –

+0

這就是我從命令行運行Perl程序...你的意思是我也一樣從我的C++程序 – itcplpl

+1

@itcplpl內:是的,但使用''的'system()'函數。 – jwodder

回答

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` 

反引號將運行反引號內部的內容,然後將命令的輸出放在命令行中。

+0

是的,我可以運行perl -MExtutils ::本身。現在,當我運行的g ++ FN-TEST.CPP -ot'perl的-MExtUtils ::嵌入-e CCOPTS -e ldopts' 看起來它與反引號 – itcplpl

+0

爲什麼它可能是由已刪除日期/ Manip.pm任何想法,現在編譯在ExtUtils :: Embed上運行強制安裝 – itcplpl