[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Enlazar con las librerias de postgresql.



On Fri, 23 Jun 2000, Rafael Eduardo Martín Candial wrote:

> Hola a todos:
> 
> He instalado el postgresql para hacer una pequeña aplicación que acceda a una base de datos
> y me he encontrado con que no puedo enlazar con las librerias de la base de datos.
> 
> En el directorio /usr/lib tengo las siguientes:
> libpq++.a  
> libpq++.so -> libpq++.so.2.0  
> libpq++.so.2.0  
> libpq.a	
> libpq.so -> libpq.so.2.0 
> libpq.so.2.0
> 
> En el fichero fuente hay estos includes:
> #include <stdio.h>
> #include "postgres.h"
> #include "libpq-fe.h"
> 
> Pero al compilar da estos errores. 
> 
> gcc  -L/usr/lib/  -I/usr/include/pgsql example1.cpp 


 gcc  -lpq -lcrypt   -I/usr/include/pgsql example1.cpp 

Creo que bastaría con esto. (No estoy seguro de si lcrypt es necesario,
prueba a quitarlo).


> /tmp/ccxeEA2h.o: In function `exit_nicely(pg_conn *)':
> /tmp/ccxeEA2h.o(.text+0x8): undefined reference to `PQfinish'
> /tmp/ccxeEA2h.o: In function `main':
> /tmp/ccxeEA2h.o(.text+0x66): undefined reference to `PQsetdbLogin'
> /tmp/ccxeEA2h.o(.text+0x77): undefined reference to `PQstatus'
> /tmp/ccxeEA2h.o(.text+0xa1): undefined reference to `PQerrorMessage'
> /tmp/ccxeEA2h.o(.text+0xd4): undefined reference to `PQexec'
> /tmp/ccxeEA2h.o(.text+0xe5): undefined reference to `PQresultStatus'
> /tmp/ccxeEA2h.o(.text+0x10b): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x123): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x134): undefined reference to `PQexec'
> /tmp/ccxeEA2h.o(.text+0x145): undefined reference to `PQresultStatus'
> /tmp/ccxeEA2h.o(.text+0x16b): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x183): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x194): undefined reference to `PQexec'
> /tmp/ccxeEA2h.o(.text+0x1a5): undefined reference to `PQresultStatus'
> /tmp/ccxeEA2h.o(.text+0x1cb): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x1e3): undefined reference to `PQnfields'
> /tmp/ccxeEA2h.o(.text+0x209): undefined reference to `PQfname'
> /tmp/ccxeEA2h.o(.text+0x245): undefined reference to `PQntuples'
> /tmp/ccxeEA2h.o(.text+0x27d): undefined reference to `PQgetvalue'
> /tmp/ccxeEA2h.o(.text+0x2b7): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x2c8): undefined reference to `PQexec'
> /tmp/ccxeEA2h.o(.text+0x2d9): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x2ea): undefined reference to `PQexec'
> /tmp/ccxeEA2h.o(.text+0x2fb): undefined reference to `PQclear'
> /tmp/ccxeEA2h.o(.text+0x307): undefined reference to `PQfinish'
> collect2: ld returned 1 exit status
> 
> 
> ¿ALGUIEN PUEDE AYUDARME?
> Quiero configurar un entorno para compilar aplicaciones que accedan a postgresql.
> Los fuentes de mis programas en un directorio.
> Los ejecutables reultantes de la compilacion los quiero en otro directorio.
> Los objetos quiero que se almacenen en un ditectorio.
> Vamos, una esructura semejenate a esta:
> 
> ~/fuentes/source
> ~/fuentes/include
> ~/bin
> ~/obj
> ~/scr/mak
> ~/scr/sh

Que pongas todos los binarios y los objetos en un mismo sitio pase
pero los source, include y los mak deberían estar organizados por
proyecto.

~/src/proyeto1
~/src/proyeto2
~/src/proyeto3

En cada proyecto tendrías los *.c *.h *.mak y cualquier otra cosa
que requiera ese proyecto. Bueno es solo una idea y ya se que no es 
perfecta. Por ejemplo puede ocurrir que un fuente se use para varios
proyectos. Lo que yo habo es usar links simbolicos para mantener un
solo fuente pero hay que ser conscientes de que si se modifica un
fuente común se veran afectados varios proyectos. 

> 
> En source los fuentes y los ficheros de cabecera en include.
> los cobjetos generados en la compilacion  en obj
> en bin los programas generados.
> en mak las macros de compilacion.
> y en sh las shell de ejecucion.
> 
> Necesito ayuda mara crear un .mak que haga todo esto y enlace con las librerias de la base de datos.
> 

Bueno ajustandome a lo que tu preguntabas sería una cosa así. No
lo tomes al pie de la letra. Solo espero que te sirva de orientación
y estudiate el comando make.

OBJS = ~/obj/modulo1.o ~/obj/example1.o

~/bin/example1: $(OBJS)
        gcc $(OBJS)  -lpq -lcrypt  -o ~/bin/example1

~/obj/modulo1.o: ~/fuentes/include/modulo1.h ~/fuentes/source/modulo1.c
        gcc ~/fuentes/source/modulo1.c  -c  -I/usr/include/postgresql

~/obj/example1.o: ~/fuentes/source/example1.c
        gcc ~/fuentes/source/example1.c  -c  -I/usr/include/postgresql
	
clean:
	rm -f $(OBJS)
				

> Un saludo a todos, y gracias de antemano.
> 
> Rafael Martín.
> 
> 
> 
> --
> Unsubscribe?  mail -s unsubscribe debian-user-spanish-request@lists.debian.org < /dev/null

Saludos

Antonio


+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
        /\     /\                     Ciberdroide Informatica (tienda linux)
          \\W//                             http://www.ciberdroide.com 
	 _|0 0|_                                                    
+-oOOO--(___o___)--OOOo------------------------------------------------------+ 
|  . . . . U U . . . . Antonio Castro Snurmacher !! Nueva direccion email !! |  
| http://slug.ctv.es/~acastro.      -> -> -> ->  acastro@ciberdroide.com     | 
+()()()----------()()()------------------------------------------------------+
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
(((Donde Linux)))    http://www.ciberdroide.com/misc/donde/dondelinux.html
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+



Reply to: