Hola ! Estoy tratando de compilar unas funciones que he hecho en C para 
Postgres en Windows la compilacion me arrojo warnings pero compilo
D:\exte_c>compila2
D:\exte_c>D:\mingw\bin\gcc -g -O2 -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv  -I 
"C:/ariela/db/include/" -I "C:/ariela/db/include/server" -I 
"C:/ariela/db/include/server/port/win32" -DEXEC_BACKEND "-I 
C:/ariela/db/include/server/port/win32" -c pg2.c -o pg2.o
In file included from C:/ariela/db/include/server/postgres.h:47,from 
pg2.c:3:C:/ariela/db/include/server/c.h:284:2: #error must have a working 
64-bit integer datatype
In file included from pg2.c:3:C:/ariela/db/include/server/postgres.h:550: 
error: syntax error before "X"In file included from pg2.c:5:libstd.h:116: 
warning: no previous prototype for 'getmacwindows2num'pg2.c:40: warning: no 
previous prototype for 'pg_serverid'pg2.c: In function `pg_serverid':pg2.c:44: 
warning: ISO C90 forbids mixed declarations and codepg2.c: At top 
level:pg2.c:52: warning: no previous prototype for 'one'
D:\exte_c>D:\mingw\bin\gcc  -shared -o pg_server_function.dll pg2.o -L 
"C:\ariela\db\lib" -lpostgres
Al terminar me genero un archivo llamado pg_server_function.dll que es donde 
estan las funciones en C ya compiladas
Mi problema es que al momento de agregar estas funciones a la BD usando CREATE 
FUNCTION pg_serverid(integer) RETURNS double precision     AS 
'D:\\exte_c\\pg_server_function.dll', 'pg_serverid'     LANGUAGE C STRICT;
Consigo estos errores::::::::
WARNING:  nonstandard use of \\ in a string literalLINE 2:      AS 
'D:\\exte_c\\pg_server_function.dll', 'pg_serverid'                ^HINT:  Use 
the escape string syntax for backslashes, e.g., E'\\'.ERROR:  incompatible 
library "D:\exte_c\pg_server_function.dll": version mismatchDETAIL:  Server is 
version 9.0, library is version 8.3.
********** Error **********
ERROR: incompatible library "D:\exte_c\pg_server_function.dll": version 
mismatchSQL state: XX000Detail: Server is version 9.0, library is version 8.3.
Lo extraño es que si compile contra la version 9 no la 8.3, bueno cuando hice 
la función la hice con 8.3 pero esa versión incluso la desinstale de la maquina 
para recompilar con la 9Lo compilo de esta forma
D:\mingw\bin\gcc -g -O2 -Wall -Wmissing-prototypes -Wpointer-arith 
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fwrapv  -I 
"C:/ariela/db/include/" -I "C:/ariela/db/include/server" -I 
"C:/ariela/db/include/server/port/win32" -DEXEC_BACKEND "-I 
C:/ariela/db/include/server/port/win32" -c pg2.c -o pg2.o
D:\mingw\bin\gcc  -shared -o pg_server_function.dll pg2.o -L "C:\ariela\db\lib" 
-lpostgres
No se algún parámetro de esto le asegura que es la versión 8.3 pero supongo que 
no porque son solo parámetros del compilador. Uso MinGW para compilar.
La instalacion de Postgres la hice desde el instalador de EnterpriseDB , sera 
que tienen la version 8.3 ? No creo...no?

*-------------------------------------------------------* 
*-Edwin Quijada 
*-Developer DataBase 
*-JQ Microsistemas 

*-Soporte PostgreSQL

*-www.jqmicrosistemas.com
*-809-849-8087
*-------------------------------------------------------*

                                          

Responder a