in reply to Re^2: Help with Inline C
in thread Help with Inline C
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 => '-lparser';
and if the library is not to be found in one of the locations that is searched by default:use Inline C => Config => LIBS => '-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 => 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 => Config => BUILD_NOISY => 1, LIBS => '-L/path/to/lib -lfoo';
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.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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Help with Inline C
by downer (Monk) on Oct 15, 2007 at 14:37 UTC | |
by syphilis (Archbishop) on Oct 15, 2007 at 22:54 UTC | |
|
Re^4: Help with Inline C
by downer (Monk) on Oct 15, 2007 at 14:49 UTC | |
|
Re^4: Help with Inline C
by downer (Monk) on Oct 15, 2007 at 15:02 UTC | |
by mwah (Hermit) on Oct 15, 2007 at 15:55 UTC | |
by syphilis (Archbishop) on Oct 15, 2007 at 23:01 UTC | |
by tye (Sage) on Oct 16, 2007 at 04:10 UTC |