запуск Perl-программы из C ++ программы - PullRequest
4 голосов
/ 02 октября 2011

У меня есть программа на 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

, он какое-то время работал, и теперь, когда я пытаюсь снова скомпилировать, я получаю ту же ошибку.Я впервые пытаюсь вызвать Perl-программу из C ++, поэтому любые советы будут полезны.

1 Ответ

5 голосов
/ 02 октября 2011

Ошибка, которую вы видите, заключается в том, что 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`

Бэктикс будет запускать то, что находится внутри бэктикса, а затем выведет вывод команды в командную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...