Как встроить perl-скрипт в gwan c-скрипт?

Ниже мой скрипт c. Я не знаю, почему EXTERN.h и perl.h не найдены, поэтому я делаю пользовательскую ссылку ниже. Если можете решить это, пожалуйста, помогите тоже.

Я пытаюсь встроить perl-скрипт на C. Файл hell.c, сокращение от файла hello.c

Хотел бы запустить встроенный скрипт perl из c.

Ошибка, как показано ниже, при попытке запустить gwan:

In file included from /usr/lib/perl/5.10.1/CORE/perl.h:2424:0,
                 from /home/qryos/Downloads/gwan_linux64-bit/0.0.0.0_8080/#0.0.0.0/csp/hell.c:9:
/usr/lib/perl/5.10.1/CORE/handy.h:108:0: warning: "bool" redefined
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdbool.h:33:0: note: this is the location of the previous definition
In file included from /usr/lib/perl/5.10.1/CORE/perl.h:3427:0,
                 from /csp/hell.c:9:
/usr/lib/perl/5.10.1/CORE/utf8.h:46:10: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'unsigned'
In file included from /csp/hell.c:9:0:
/usr/lib/perl/5.10.1/CORE/perl.h:4205:10: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'
/usr/lib/perl/5.10.1/CORE/perl.h:4207:10: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'char'

Фактический сценарий

// ============================================================================
// C servlet sample for the G-WAN Web Application Server (http://trustleap.ch/)
// ----------------------------------------------------------------------------
// hello.c: just used with ab (ApacheBench) to benchmark a minimalist servlet
// ============================================================================
#include "gwan.h" // G-WAN exported functions
//#include <EXTERN.h>
//#include <perl.h>
#include "/usr/lib/perl/5.10.1/CORE/perl.h"
#include "/usr/lib/perl/5.10.1/CORE/EXTERN.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;
        call_argv("showtime", G_DISCARD | G_NOARGS, args);
        perl_destruct(my_perl);
        perl_free(my_perl);
        PERL_SYS_TERM();
    }
*/

int main(int argc, char *argv[], char *env[])
{
   static char msg[] = "Hello, ANSI C!";
   xbuf_ncat(get_reply(argv), msg, sizeof(msg) - 1);

/*
        //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;
//        call_argv("showtime", G_DISCARD | G_NOARGS, args);
        perl_destruct(my_perl);
        perl_free(my_perl);
        PERL_SYS_TERM();
*/

   return 200; // return an HTTP code (200:'OK')
}

ОБНОВЛЕНИЕ, предложение Гила

я вставил это

#pragma include "/usr/lib/perl/5.10.1/CORE/"
#include <EXTERN.h>
#include <perl.h>

Ошибка ниже:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Error: hell.c
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/perl/5.10.1/CORE/perl.h:2424:0,
                 from /home/example/Downloads/gwan/0.0.0.0_8080/#0.0.0.0/csp/hell.c:9:
/usr/lib/perl/5.10.1/CORE/handy.h:108:0: warning: "bool" redefined
/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdbool.h:33:0: note: this is the location of the previous definition
In file included from /usr/lib/perl/5.10.1/CORE/perl.h:4829:0,
                 from /csp/hell.c:9:
/usr/lib/perl/5.10.1/CORE/proto.h:690:47: error: expected declaration specifiers or '...' before 'off64_t'
/usr/lib/perl/5.10.1/CORE/proto.h:697:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Perl_do_sysseek'
/usr/lib/perl/5.10.1/CORE/proto.h:702:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Perl_do_tell'
/usr/lib/perl/5.10.1/CORE/proto.h:6019:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Perl_PerlIO_tell'
/usr/lib/perl/5.10.1/CORE/proto.h:6020:53: error: expected declaration specifiers or '...' before 'off64_t'
/csp/hell.c:29:5: error: conflicting types for 'main'
/home/example/Downloads/gwan/include/gwan.h:36:13: note: previous declaration of 'main' was here

person stashfree    schedule 30.11.2014    source источник


Ответы (1)


У вас есть ошибки компиляции в заголовках Perl C. Вы должны начать с этого.

Похоже, что основная проблема заключается в отсутствии определений, ищите зависимости дерева каталогов Perl и добавляйте любой отсутствующий каталог с помощью директивы G-WAN #pragma include:

#pragma include "/usr/lib/perl/5.10.1/"

ТОГДА вы сможете использовать #include <perl.h>.

Имейте в виду, что G-WAN не скомпилирует программу, которая не скомпилируется с помощью GCC. Таким образом, ваш первый шаг, вероятно, состоит в том, чтобы заставить ваш скрипт Perl работать как отдельная программа... а затем попытаться интегрировать его с G-WAN.

person Gil    schedule 01.12.2014
comment
#pragma include /usr/lib/perl/5.10.1/ не работает. я должен сделать это #pragma include /usr/lib/perl/5.10.1/CORE/, но ошибка все еще существует. Пожалуйста, посмотрите обновление. Спасибо - person stashfree; 02.12.2014
comment
тлдр; Я хотел бы понять, как правильно связать файлы с примером руководства по установке для наемных и ssdb.io при новой установке Ubuntu или Centos с нуля. моя программа работает как отдельная программа. Я хорошо разбираюсь в php и perl, но после недели игры с g-wan я все еще не могу написать на нем приличную программу. в основном из-за ссылки выше. я хотел бы использовать ssdb.io в cpp и Hiredis для Redis. Можете ли вы сделать учебник по правильному связыванию библиотек с примерами? с нуля для серверов Ubuntu (сначала Centos, а затем)? - person stashfree; 02.12.2014
comment
Я могу кодировать исключительно на php или perl, но для этого нет необходимости использовать gwan, потому что основным узким местом / проблемой производительности по-прежнему является язык в конце дня. Если я смогу правильно выполнить это связывание, я уверен, что смогу начать вносить некоторые примеры кода... это действительно очень сложно. смысл в том, чтобы использовать C или CPP с gwan и только с ними. - person stashfree; 02.12.2014
comment
Хотелось бы увидеть какой-нибудь встроенный perl в действии на скрипте gwan C/cpp (или встроенный php в действии) - person stashfree; 02.12.2014
comment
Извините, я думаю, что я прошу, это docker ubuntu для g-wan, который может запускать, например, арендис и ssdb. Спасибо! Пожалуйста, докеризируйте его. - person stashfree; 02.12.2014
comment
Вам следует обратиться за помощью к docker.com, а не к G-WAN. - person Gil; 04.12.2014