use Inline C => Config => LIBS => '-lparser';
but that pre-supposes that there actually is a library named libparser.a that is going to resolve the symbol. If that's not the case then different action needs to be taken. Fawk, the library is actually named 'libfoo.a', in which case you need to:
use Inline C => Config => LIBS => '-lfoo';
and if the library is not to be found in one of the locations that is searched by default:
use Inline C => Config => LIBS => '-L/path/to/lib -lfoo';
It's also a good idea to force a verbose (noisy) build, as the compiler warnings you then see may help solve the problem:
use Inline C => Config =>
BUILD_NOISY => 1,
LIBS => '-L/path/to/lib -lfoo';
If, however, there's no library at all that resolves parser(), then you need to spell the function out in the C code in the script:
use Inline C => <<END_C;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Wild guess follows:
int parser (char * url, char * page, char * pool, int lenx2) {
// C code that does whatever
// it is that parser()does.
}
char* MyParser(char *url, char* page)
{
char *pool;
int len;
int ret;
len = strlen(page);
// page = (char*)malloc(len);
pool = (char*)malloc(2*len+1);
// parsing page
ret = parser(url, page, pool, 2*len+1);
if(ret > 0)
return pool;
free(pool);
}
END_C
Seems to me that once you get the C code to compile, the perl code will croak because you're calling MyParser() with one arg, but it needs 2 args.
Cheers, Rob |