Date: Thu, 12 Jan 2012 13:45:06 +0800
From: ring...@ringerc.id.au
To: listas_quij...@hotmail.com
CC: pgsql-general@postgresql.org
Subject: Re: [GENERAL] Compiling C function with VC++ for Windows version


  


    
  
  
    On 12/01/12 11:06, Edwin Quijada wrote:
    
      
      
        Hi!
        I am trying to create a C function for windows in Postgres
          compiling with VC++ 2008 Express Edition. I did this function
          for Linux without problem using gcc and tried to do the same
          in Windows but in Windows was imposible. The function compile
          fine but when I tried to run from Postgres it down the server
          in windows but in Linux the same function run perfect.
      
    
    

    You haven't provided enough information for anyone to help you.

    

    How are you compiling your function? Using pgxs, or some other way?

    

    What's the full source code of the function?

    

    Where does the server crash when it crashes? You might need to get a
    backtrace of the server crash to help you figure out why your
    function crashes it. See this documentation on getting a backtrace
    of a Pg backend under windows:

    

    
    
http://wiki.postgresql.org/wiki/Getting_a_stack_trace_of_a_running_PostgreSQL_backend_on_Windows

    

    
      
        

        
        The function just try to get a string value and pass to
          postgres. Reading somebody told me that I need to compile the
          function using VC++ not gcc in Windows so I downloaded VC++
          2008 Express but I dont know what directives compilation I
          need as gcc in windows and Linux.
      
    
    

    If you are using a standard binary distribution of PostgreSQL then
    yes, you should use Visual C++, preferably the same version of
    Visual C++ that was used for that version of PostgreSQL. Specify
    your version of Pg.---------------
Ok.This is the way that I compile. Linux this way works fine and I use the 
modules compiled. of course, Linux I compile from source and I use gcc.
C:\mingw\bin\gcc -g -O2 -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv  -I 
"C:/Program Files/PostgreSQL/8.3/include/" -I "C:/Program 
Files/PostgreSQL/8.3/include/server" -I "C:/Program 
Files/PostgreSQL/8.3/include/server/port/win32" -DEXEC_BACKEND "-I C:/Program 
Files/PostgreSQL/8.3/include/server/port/win32"    -c pg2.c -o 
pg2.oC:\mingw\bin\gcc  -shared -o pg_server_function.dll pg2.o -L "C:\Program 
Files\PostgreSQL\8.3\lib" -lpostgres
It is using gcc in windows version
This is the module that I want to compile
<code> #include "postgres.h"#include "fmgr.h"#include <stdio.h>#include 
<string.h>
#include "libstd.h"
#ifdef PG_MODULE_MAGICPG_MODULE_MAGIC;#endif

PG_FUNCTION_INFO_V1(pg_server_id);
Datum pg_server_id(PG_FUNCTION_ARGS){   char mac[30];   text *new_t = (text *) 
palloc(30);   int32 arg = PG_GETARG_INT32(0);//  getmacwindows(mac);//  
SET_VARSIZE(new_t, strlen(mac) + VARHDRSZ);  memcpy(VARDATA(new_t),(text 
*)mac,strlen(mac));    PG_RETURN_TEXT_P(new_t);}
 
PG_FUNCTION_INFO_V1(pg_serverid);Datumpg_serverid(PG_FUNCTION_ARGS){  float8 
mac;  int32   arg = PG_GETARG_INT32(0);  //  arg++;   mac = 
getmacwindows2num();  //  PG_RETURN_FLOAT8(mac);}               


PG_FUNCTION_INFO_V1(one);               Datum one(PG_FUNCTION_ARGS)     {       
            int32   arg = PG_GETARG_INT32(0);           int32 x= ++arg; 
//mac2num();             //getmacwindows(mac);      PG_RETURN_INT32(x); }</code>
The function is simple just get the mac address of the PC. Now, I am trying to 
use VC++ 2008 Express to compile this module but I dont know how to pass all 
these parameters using VC++
In this example is 8.3 but I tried with 9.0 too
This compile fine the problem at running timme this crash down my server..:(Any 
help will be so apreciated.

    

    --

    Craig Ringer
                                          

Reply via email to