Skip site navigation (1) Skip section navigation (2)

Re: Compiling a user C function in 7.2.1

From: John Gunther <inbox(at)bucksvsbytes(dot)com>
To: pgsql-novice(at)postgresql(dot)org
Subject: Re: Compiling a user C function in 7.2.1
Date: 2002-07-28 12:36:39
Message-ID: 3D43E557.4030403@bucksvsbytes.com (view raw or flat)
Thread:
Lists: pgsql-novice
P.S. I forgot to supply the commands I used to compile and link my 
bvbpglib.so library:
gcc -O2 -march=i386 -mcpu=i686 -Wall -Wmissing-prototypes 
-Wmissing-declarations -fpic 
-I/usr/src/redhat/BUILD/postgresql-7.2.1/src/interfaces/libpq 
-I/usr/src/redhat/BUILD/postgresql-7.2.1/src/include 
-I/usr/kerberos/include  -c -o bvbpglib.o bvbpglib.c
gcc -shared -o /usr/include/bvbpglib.so bvbpglib.o

John G

John Gunther wrote:

> Tom Lane wrote:
>
>> (a) you didn't run configure, which creates the files you are missing.
>>  
>>
> Thanks, Tom. Your reply caused me to learn a lot about building 
> PostgreSQL from source.
>
> Now I'm much further along: I have created a dynamic library 
> (bvbpglib.so) containing one PostgreSQL C function (bvbpgsortword). 
> This function calls a "regular" (non-PostgreSQL) C function 
> (bvbmakesortstring).
>
> My current problem is that my psql statement:
> CREATE FUNCTION bvbpgsortword(TEXT) RETURNS TEXT AS 
> '/usr/include/bvbpglib' LANGUAGE C WITH (ISSTRICT);
> fails with "undefined symbol: bvbmakesortstring"
>
> This is probably the result of some fundamental deficit in my 
> understanding of C writing/compiling/linking, but what puzzles me is 
> that bvbmakesortstring is called successfully from another C program I 
> wrote. Only in psql does it come back undefined.
>
> Thanks.
>
> John Gunther
>
> For anyone is interested in enlightening me, relevant source follows:
>
> SOURCE FOR bvbpglib.c (used to create bvbpglib.so, contains PostgreSQL 
> function bvbpgsortword):
> #include "postgres.h"
> #include "fmgr.h"
> #include <string.h>
> #include "bvblib.h"
> Datum bvbpgsortword(PG_FUNCTION_ARGS);
> PG_FUNCTION_INFO_V1(bvbpgsortword);
> Datum bvbpgsortword(PG_FUNCTION_ARGS){
> //declarations
>    char  *bvbmakesortstring(const char *input, const int bitmodes, 
> const unsigned short int minlength, const char *keeplist, const char 
> *outdelim, const char *stoplist);
>    text *instr = PG_GETARG_TEXT_P(0);
>    text *outstr;
>    unsigned int length;
>    char *target;
> //code
>    target=VARDATA(outstr);
>    target = bvbmakesortstring(VARDATA(instr),1,0,"","}","");
>    length=strlen(target-1);
>    target[length]=0;
>    VARATT_SIZEP(outstr) = length + VARHDRSZ;
>    PG_RETURN_TEXT_P(outstr);
> }
>
> SOURCE FOR test.c (this successfully calls bvbmakesortstring):
> #include <stdio.h>
> #include "bvblib.h"
> int /*function*/ main(){
>    
> printf("out=%s\n",bvbmakesortstring("test-mctöst'tëst",0,0,",","=","A"));
>    return 0;
> }
>
> PARTIAL SOURCE FOR bvblib.c (this library contains bvbmakesortstring):
> #include <string.h>
> #include "bvblib.h"
> char    bvbstr[65535];
> char *bvbmakesortstring(
>    const char *instr,
>    const int bitmodes,
>    const unsigned short int minlength,
>    const char *keeplist,
>    const char *outdelim,
>    const char *stoplist
> )
> {<code>...
>     return bvbstr;//return the sort-ready string
> }
>
> SOURCE FOR bvblib.h:
> #ifndef BVBLIB_H     /* has this been included */
> #define BVBLIB_H     /* if not say its been done once */
> char bvbstr[65535];
> char *bvbmakesortstring(
>    const char                                *instr, //string to be 
> processed
>    const int                                    bitmodes,
>    const unsigned short int    minlength,    //words shorter than this 
> are ignored
>    const char                                  *keeplist,    //chars 
> to be kept in output words
>    const char                                  *outdelim,    //char 
> string to use as word delimiter
>    const char                                  *stoplist        
> //space-separated words to be ignored
> );
> #endif                  /* end the #ifndef construct */
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>    (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
>



In response to

pgsql-novice by date

Next:From: Tom LaneDate: 2002-07-28 17:12:45
Subject: Re: Compiling a user C function in 7.2.1
Previous:From: John GuntherDate: 2002-07-28 12:29:09
Subject: Re: Compiling a user C function in 7.2.1

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group