Thread

  1. compiling extension functions? (fwd)

    Tripp Lilley <tlilley@perspex.com> — 1998-02-11T19:41:22Z

    I posted this to questions a few days back but got no response. Can anyone
    here help me with this? I know it should be straightforward, and that I'm
    missing something obvious, but precisely *what* I'm missing is unknown to
    me.
    
    Thanks!
    
    - t.
    
    -----------------------------------------------------------------------
       Tripp Lilley, Perspex Imageworks, Inc. (tripp.lilley@perspex.com)
    -----------------------------------------------------------------------
          "Give me a fast computer, for I intend to go in harm's way"
                          - updating John Paul Jones
    
    ---------- Forwarded message ----------
    Date: Mon, 9 Feb 1998 12:42:48 -0500 (EST)
    From: Tripp Lilley <tlilley@perspex.com>
    To: pgsql-questions@postgresql.org
    Subject: compiling extension functions?
    
    I'm trying to compile and use a 'C' extension function for PG 6.2.1 under
    Red Hat Linux 4.2 (stock distribution). I am executing the following
    commands to compile my shared library and install my function, but I get
    "Unable to resolve symbol" when I try to execute the function.
    
    > gcc -fpic -shared salmon.c -o salmon.so -L/usr/lib -lpq 
    -I/usr/include/postgres
    > touch salmon.sql
    > psql -d nim_0_01 -f salmon.sql
    drop function salmon (int4);
    DROP
    
    create function
                    salmon (int4)
            returns
                    char16
            as
                    '/home/tlilley/projects/perspex/scratch/nim/salmon.so'
            language
                    'c';
    CREATE
    EOF
    
    
    > psql -d nim_0_01
    
    nim_0_01=> select salmon( 42 );
    WARN:Load of file /home/tlilley/projects/perspex/scratch/nim/salmon.so
    failed: Unable to resolve symbol
    nim_0_01=> 
    
    
    And here's the source for my function:
    
    #include <postgres.h>
    #include <utils/palloc.h>
    
    
    char16 * salmon (int4 value)
    {
      char16 * buffer = (char16 *) palloc( sizeof( char16 ) );
    
    
      memset( (void *) buffer, 0, sizeof( char16 ) );
      (void) strncpy( buffer, "hello", 16 );
      return( buffer );
    }
    
    
    Any help (especially 'working' compile command-lines) would be great!
    
    Thanks...
    
    - t.
    
    -----------------------------------------------------------------------
       Tripp Lilley, Perspex Imageworks, Inc. (tripp.lilley@perspex.com)
    -----------------------------------------------------------------------
          "Give me a fast computer, for I intend to go in harm's way"
                          - updating John Paul Jones
    
    
    
    
  2. Re: [HACKERS] compiling extension functions? (fwd)

    Thomas Lockhart <lockhart@alumni.caltech.edu> — 1998-02-12T02:31:28Z

    > I'm trying to compile and use a 'C' extension function for PG 6.2.1 under
    > Red Hat Linux 4.2 (stock distribution). I am executing the following
    > commands to compile my shared library and install my function, but I get
    > "Unable to resolve symbol" when I try to execute the function.
    >
    > > gcc -fpic -shared salmon.c -o salmon.so -L/usr/lib -lpq
    > -I/usr/include/postgres
    > > touch salmon.sql
    > > psql -d nim_0_01 -f salmon.sql
    > drop function salmon (int4);
    > DROP
    >
    > create function
    >                 salmon (int4)
    >         returns
    >                 char16
    >         as
    >                 '/home/tlilley/projects/perspex/scratch/nim/salmon.so'
    >         language
    >                 'c';
    > CREATE
    > EOF
    >
    > > psql -d nim_0_01
    >
    > nim_0_01=> select salmon( 42 );
    > WARN:Load of file /home/tlilley/projects/perspex/scratch/nim/salmon.so
    > failed: Unable to resolve symbol
    > nim_0_01=>
    >
    > And here's the source for my function:
    >
    > #include <postgres.h>
    > #include <utils/palloc.h>
    >
    > char16 * salmon (int4 value)
    > {
    >   char16 * buffer = (char16 *) palloc( sizeof( char16 ) );
    >
    >   memset( (void *) buffer, 0, sizeof( char16 ) );
    >   (void) strncpy( buffer, "hello", 16 );
    >   return( buffer );
    > }
    >
    > Any help (especially 'working' compile command-lines) would be great!
    
    Look in contrib/int8/ for code and Makefile which were developed on RH Linux
    4.2. ld may not be finding the libraries it needs. You may need to set
    LD_LIBRARY (or something like that, don't remember the name exactly) and/or
    modify /etc/ld.so.conf then run ldconfig to get the load library database
    pointing at the Postgres libraries.
    
    Good luck.
    
                                                                   - Tom