pg.ddx.io  pgsql-interfaces@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Lonnie Cumberland <lonnie_cumberland@yahoo.com>
To: Peter Eisentraut <peter_e@gmx.net>
Cc: pgsql-interfaces@postgresql.org
Subject: g++ not working for postgresql extension languages?
Date: Sat, 14 Apr 2001 17:46:15 -0700 (PDT)
Message-ID: <20010415004615.35217.qmail@web12508.mail.yahoo.com> (raw)
In-Reply-To: <Pine.LNX.4.30.0104150020360.761-100000@peter.localdomain>

Hi All again,

One more thing that I have tried.

If I now do a similar thing as in my previous message with the "funcs.c" file,
but this time with the "funcs.cc" file then I can get:

-------------------------------------------------------------------------
[root@Treazurac /test]# g++ -I./include -I./backend -O2 -Wall
-Wmissing-prototypes -Wmissing-declarations -I/usr/include/pgsql -I/usr/include
-fpic -c -o funcs.o funcs.cc

[root@Treazurac /test]# g++ -shared -o funcs.so funcs.o

[root@Treazurac /test]# ls

Makefile  Makefile.global  Makefile.port  funcs.cc  funcs.o  funcs.so* 
funcs.sql

[root@Treazurac /test]# pico -w funcs.sql

[root@Treazurac /test]# psql -f funcs.sql -d trdata
DROP
CREATE

[root@Treazurac /test]# psql trdata
Welcome to psql, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
 
trdata=# select concat_text('a','b');
ERROR:  Can't find function concat_text in file /test/funcs.so
trdata=#         
--------------------------------------------------------------------------

And although I should not be running as "root", this is a test machine and it
is ok for the time being.

If I do the same thing as above, but using the "funcs.c" file (which is the
exact same file just renamed)
---------------------------------------------------------------------------
funcs.c and funcs.cc
-------------------------
#include "postgres.h"           // for variable length type
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
#include <unistd.h>             // for unix crypt function
 
text *
concat_text(text *arg1, text *arg2);
 
text *
concat_text(text *arg1, text *arg2)
{
    int32 new_text_size = VARSIZE(arg1) + VARSIZE(arg2) - VARHDRSZ;
    text *new_text = (text *) malloc(new_text_size);
 
    memset((void *) new_text, 0, new_text_size);
    VARSIZE(new_text) = new_text_size;
    strncpy(VARDATA(new_text), VARDATA(arg1), VARSIZE(arg1)-VARHDRSZ);
    strncat(VARDATA(new_text), VARDATA(arg2), VARSIZE(arg2)-VARHDRSZ);
    return (new_text);
}                                                            
--------------------------------------------------------------------------

with funcs.sql
------------------
DROP FUNCTION concat_text(text, text);
CREATE FUNCTION concat_text(text, text) RETURNS text
     AS '/test/funcs.so' LANGUAGE 'c'; 
----------------------------------------------------------------------------

With the "funcs.c" file in place I get:
-----------------------------------------------------------------------------
[root@Treazurac /test]# gcc -I./include -I./backend -O2 -Wall
-Wmissing-prototypes -Wmissing-declarations -I/usr/include/pgsql -I/usr/include
-fpic -c -o funcs.o funcs.c

[root@Treazurac /test]# gcc -shared -o funcs.so funcs.o

[root@Treazurac /test]# psql -f funcs.sql -d trdata
DROP
CREATE

[root@Treazurac /test]# psql trdata
Welcome to psql, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
 
trdata=# select concat_text('a','b');
 concat_text
-------------
 ab
(1 row)
 
trdata=#            
-----------------------------------------------------------------------------

so now I do not understand why the "gcc" version works and the "g++" version
does not?

Just a side note in that I can easliy compile c++ the examples in the
interfaces/libpq++ directory without any problems so that this is very strange
to me. 
 
I really need the "g++" version to work correctly as well?

Any ideas anyone?

Cheers
Lonnie



__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/



view thread (6+ messages)  latest in thread

Message-ID: <20010415004615.35217.qmail@web12508.mail.yahoo.com>
Permalink:  ../20010415004615.35217.qmail@web12508.mail.yahoo.com/
Also on:    postgresql.org/message-id/20010415004615.35217.qmail@web12508.mail.yahoo.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-interfaces@postgresql.org
  Cc: lonnie_cumberland@yahoo.com, peter_e@gmx.net
  Subject: Re: g++ not working for postgresql extension languages?
  In-Reply-To: <20010415004615.35217.qmail@web12508.mail.yahoo.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox