2011-10-01 4 views
4

인벤토리를 계산할 C++ 프로그램이 있으며 특정 레벨 아래로 떨어지면 주문 세부 정보를 DB에 기록 할 필자의 펄 프로그램에 전화하고 싶습니다. 나는 C++에서 펄 호출에 설명서를 읽고 난 컴파일하려고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. 

다음과 같은 오류를 얻을 cpan 및 도망

force install ExtUtils::Embed 

잠깐 동안 내가 다시 컴파일하려고하면 같은 오류가 발생합니다. C++에서 Perl 프로그램을 처음 호출하는 것이므로 모든 팁이 도움이 될 것입니다.

+2

Perl과 C++ 사이에 높은 커플이 필요합니까? 그렇지 않다면 시스템 ("perl myscript.pl") –

+0

을 실행하면 명령 행에서 펄 프로그램을 실행하는 방법을 알 수 있습니다 ... 내 C++ 프로그램 내에서 동일한 작업을 수행했다는 것을 의미합니까? – itcplpl

+1

@itcplpl : 예,하지만 사용하고 있습니다. ''의'system()'함수가 있습니다. – jwodder

답변

5

표시되는 오류는 EXTERN.h가 포함 경로에 없기 때문입니다. 그것은 당신의 g의 ++ 명령 행에없는 것처럼 펄 스크립트가

실패 때문에
그것은 당신이 그 자체로

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

를 실행할 수 보이는? 이것은 필요한 g ++ 옵션을 제공하는 스크립트입니다. 명령 줄의 perl 주위에 인용문을 쓰려면 backticks ()을 사용하고 있습니까? 그러면 perl 명령이 실행됩니다.

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

백틱은 백틱 내부에있는 내용을 실행 한 다음 명령 출력에 명령 줄을 넣습니다.

+0

그래 나는 그 자체로 펄 -MExtutils를 :: 실행할 수 있습니다. 지금 내가 g ++ fn-test.cpp를 실행할 때 -ot'perl -MExtUtils :: Embed -e ccopts -e ldopts' 지금은 백틱으로 컴파일 된 것 같습니다. – itcplpl

+0

왜 Date/Manip.pm을 위한 ExtUtils에 강제 설치를 실행 :: 삽입을 – itcplpl

관련 문제